春季批次豆的“步骤”还是“工作”范围?

我使用Spring-Batch v3.0.0进行批量导入。有一个和一个.我怎么知道哪一个是合适的?StepScopeJobScope

例如,如果我定义了一个自定义或应该使用特定的,它可能看起来像这样:ItemReaderItemWriterEntityManager

@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;
}

但是,哪个范围在这里呢?为什么呢?

使用范围执行工作,但我觉得 itemWriters 可能应该具有范围,这样它们就不会在每个步骤中重新创建。stepjob

我尝试切换到 ,但这会引发以下错误:stepjobException in thread "main" java.lang.IllegalStateException: No Scope registered for scope 'job'


答案 1

从Spring-Batch v3.0.1开始,您可以使用@JobScope

将@Bean标记为@JobScope等效于将其标记为@Scope(value=“job”, proxyMode=TARGET_CLASS)


答案 2

知道了:必须将范围作为文件中显式的bean提供。@Configuration

@Bean
public JobScope jobScope() {
    return new JobScope();
}

推荐