Я создал fileAllocationTasklet, целью которого является перемещение файла с одного пути на другой. Этот файл принимает входные данные как fromPath и To Path. Итак, я пытаюсь использовать этот же тасклет в два этапа с созданием нового объекта. Я знаю, что тасклет запускается только один раз.
@Bean
public Step step3() {
System.out.println("******step3 executing ");
return stepBuilderFactory.get("step3")
.tasklet(fileAllocationTasklet("process/data.csv","output/data.csv")).build();
}
@Bean
public Step step1(JdbcBatchItemWriter<TxnDetail> writer) {
return stepBuilderFactory.get("step1")
.tasklet(fileAllocationTasklet("initial/data.csv","process/data.csv")).build();
}
@Bean
public Tasklet fileAllocationTasklet(String fromPath,String toPath) {
FileAllocationTasklet fileAllocation = new FileAllocationTasklet();
fileAllocation.setFromPath(fromPath);
fileAllocation.setToPath(toPath);
return fileAllocation;
}
Но тасклет запускается только первый раз на шаге 1, но не запускается на шаге 3. Я сделал это, чтобы у меня не было избыточности в коде. Если есть другой лучший подход, то он будет заметен.
На самом деле ответ на этот вопрос я использовал @StepScope, что означает, что объект будет уникальным для каждого шага, но не одноэлементным. При выполнении каждого временного шага будет формироваться новый объект тасклета, который ранее не формировался из-за @Bean. Объяснение также доступно в https://stackoverflow.com/questions/38780796/how-does-spring-batch-step-scope-work?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa