我有一个要求,其中一个tasklet,存储在arraylist目录中的所有文件.列表的大小存储在作业执行上下文中.稍后,在另一个步骤中从另一个tasklet访问此计数.怎么做到这一点.我试图存储在jobexecution上下文中,在运行时抛出不可修改的集合异常,
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)
throws Exception {
StepContext stepContext = arg1.getStepContext();
StepExecution stepExecution = stepContext.getStepExecution();
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
jobContext.put("FILE_COUNT",150000);
Run Code Online (Sandbox Code Playgroud)
还将stepexection引用存储在beforestep注释中.但仍然不可能.请让我知道,如何在两个tasklet之间共享数据.
我正在使用Spring-Batch v3.0.0进行批量导入.有一个StepScope和一个JobScope.我怎么知道哪一个合适?
例如,如果我定义一个自定义ItemReader或ItemWriter应该使用特定的自定义EntityManager,它可能如下所示:
@Bean
@Scope("step") //@Scope("job") //custom scope required to inject #jobParameters
public JpaItemWriter<T> jpaItemWriter(EntityManagerFactory emf) {
JpaItemWriter<T> writer = new JpaItemWriter<T>();
writer.setEntityManagerFactory(emf);
return writer;
}
Run Code Online (Sandbox Code Playgroud)
但是哪个范围就在这里?为什么?
带step范围的执行有效,但我觉得itemWrite应该是job范围的,这样它们就不会在每一步都重新创建.
我尝试切换step到job,但是会抛出以下错误:
Exception in thread "main" java.lang.IllegalStateException: No Scope registered for scope 'job'