我可以使用FlatFileItemReader作为批处理的读者吗?我想用它来解析File。
我有读者之豆:
<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="file:${garmin.fs.in.received2}" />
<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="id,sales,qty,staffName,date" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="my.app.util.ReportFieldSetMapper" />
</property>
</bean>
</property>
</bean>
我想在我的组件中使用它:
@Component
public class Handler {
@Autowired
private FlatFileItemReader<Report> reader;
public File handleFile() {
try {
Report report = reader.read();
} catch (Exception e) {
e.printStackTrace();
}
return input;
}
}
但是在代码中:
Report report = reader.read();
我有例外:
org.springframework.batch.item.ReaderNotOpenException:Reader必须 在可以阅读之前打开。
是否可以通过以下方式使用弹簧批量阅读器?
答案 0 :(得分:0)
如异常所示,您必须在第一次致电cout << l1.first << " tiene " << l1.second << " paginas\n" << l2.first << " tiene " << l2.second << " paginas\n" << l3.first << " tiene " << l3.second << " paginas\n";
之前致电reader.open()
。
完成后,您还应该致电read()
。
答案 1 :(得分:0)
您必须实现ItemStream并重写如下的open,close和update方法-
@Component
public class Handler implements ItemStream {
@Autowired
private FlatFileItemReader<Report> reader;
public File handleFile() {
try {
Report report = reader.read();
} catch (Exception e) {
e.printStackTrace();
}
return input;
}
@Override
public void open(ExecutionContext executionContext) {
reader.open(executionContext);
}
@Override
public void update(ExecutionContext executionContext) {
reader.update(executionContext);
}
@Override
public void close() {
reader.close();
}
}