В моей настройке springbatch + quartz я читаю файл CSV с помощью FlatFileItemReader. Я хочу установить курсор для читателя, чтобы он начал следующий экземпляр задания с заданными параметрами для читателя. Является ли это возможным?
<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<!-- Read a csv file -->
<property name="resource" value="classpath:cvs/input/report.csv" />
<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,impressions" />
</bean>
</property>
<property name="fieldSetMapper">
<bean
class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
<property name="prototypeBeanName" value="report" />
</bean>
</property>
</bean>
</property>
</bean>
Идея состоит в том, чтобы продолжить чтение файла, в котором произошла последняя ошибка, при следующем выполнении. Я помещаю целое число «writecursor» для каждой строки, написанной в моем customWriter.
public void write(List<? extends Report> items) throws Exception {
System.out.println("writer..." + items.size() + " > ");
for(Report item : items){
System.out.println("writing item id: " + item.getId());
System.out.println(item);
}
//getting stepExecution by implementing StepExecutionListener
this.stepExecution.getExecutionContext().putInt("writecursor", ++writecursor);
}
Теперь в customItemReadListener я хочу получить значение курсора записи обновления, а затем пропустить строки сверху, чтобы начать чтение из курсора записи.
public class CustomItemReaderListener implements ItemReadListener<Report>, StepExecutionListener {
ApplicationContext context = ApplicationContextUtils.getApplicationContext();
private StepExecution stepExecution;
@Override
public void beforeRead() {
//Skip lines somehow
}
Еще одна вещь, которую я видел в качестве возможного решения, - это установить динамический пропуск строк в программе чтения элементов. Здесь есть ветка http://thisisurl.com/dynamic-value-for-linestoskip-in-itemreader, но еще не ответил. А здесь http://forum.spring.io/forum/spring-projects/batch/100950-accessing-job-execution-context-from-itemwriter