Spring-Batch bean的“Step”或“Job”范围?

时间:2014-06-03 14:21:43

标签: java spring batch-processing spring-batch

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

例如,如果我定义应使用特定ItemReader的自定义ItemWriterEntityManager,则它可能如下所示:

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

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

step范围的执行有效,但我觉得itemWrite可能属于job范围,因此不会在每一步都重新创建它们。

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

2 个答案:

答案 0 :(得分:7)

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

  

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

答案 1 :(得分:2)

得到它:必须在@Configuration文件中提供作为bean显式的范围。

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