春季批处理作业在使用MapFieldSet用于读取只有一列的TXT文件时会引发异常
我只有一个只有一列的TXT文件:IDS和IDS由新行分开。 我想和读者一起阅读此文件,但是我认为我不应该使用DelimitedLineTokenizer,因为我的文件没有多个列。这是代码:
<bean id="idsReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="names" value="ids" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="IdsMapper" />
</property>
</bean>
</property>
<property name="resource" value="#{stepExecutionContext['fileResource']}" />
<property name="encoding" value="UTF-8" />
</bean>
public class IdsMapper implements FieldSetMapper<String> {
@Override
public String mapFieldSet(FieldSet fs) throws BindException {
if (fs == null) {
return null;
}
return fs.readString("ids");
}
这是我收到的例外:
[jobTaskExecutor-15] ERROR Encountered an error executing step loadIds
Message: IdsMapper.mapFieldSet(Lorg/springframework/batch/item/file/transform/FieldSet;)Ljava/lang/String;
Line | Method
->> -1 | mapFieldSet in batch.model.IdsMapper
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 7 | mapFieldSet in batch.model.IdsMapper$$ET3XDpZ2
| -1 | mapFieldSet . . . . . . . . . in batch.model.IdsMapper$$DT3XDpZ2
| 43 | mapLine in org.springframework.batch.item.file.mapping.DefaultLineMapper
| 180 | doRead . . . . . . . . . . . . in org.springframework.batch.item.file.FlatFileItemReader
| 88 | read in org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader
I have a txt file with just one column: ids and the ids are separated by new line.
I want to read this file with a reader, but I think that I shouldn't use DelimitedLineTokenizer because my file doesn't have multiple columns. Here is the code:
<bean id="idsReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="names" value="ids" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="IdsMapper" />
</property>
</bean>
</property>
<property name="resource" value="#{stepExecutionContext['fileResource']}" />
<property name="encoding" value="UTF-8" />
</bean>
public class IdsMapper implements FieldSetMapper<String> {
@Override
public String mapFieldSet(FieldSet fs) throws BindException {
if (fs == null) {
return null;
}
return fs.readString("ids");
}
and here is the exception I receive:
[jobTaskExecutor-15] ERROR Encountered an error executing step loadIds
Message: IdsMapper.mapFieldSet(Lorg/springframework/batch/item/file/transform/FieldSet;)Ljava/lang/String;
Line | Method
->> -1 | mapFieldSet in batch.model.IdsMapper
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 7 | mapFieldSet in batch.model.IdsMapper$ET3XDpZ2
| -1 | mapFieldSet . . . . . . . . . in batch.model.IdsMapper$DT3XDpZ2
| 43 | mapLine in org.springframework.batch.item.file.mapping.DefaultLineMapper
| 180 | doRead . . . . . . . . . . . . in org.springframework.batch.item.file.FlatFileItemReader
| 88 | read in org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用自己的LineMapper实施:
You could use your own implementation of linemapper: