我正在使用 Spring-Batch v3.0.0 进行批量导入。有一个 StepScope
和一个 JobScope
。我怎么知道它们中的哪一个是合适的?
例如,如果我定义了一个应该使用特定 EntityManager
的自定义 ItemReader
或 ItemWriter
,它可能如下所示:
@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
范围执行是可行的,但我觉得 itemWriters 可能应该属于 job
范围,这样它们就不会在每一步都重新创建。
我尝试将 step
切换到 job
,但这会引发以下错误:
线程“main”java.lang.IllegalStateException 中的异常:没有为范围“job”注册范围
最佳答案
从 Spring-Batch v3.0.1 开始,您可以使用 @JobScope
Marking a @Bean as @JobScope is equivalent to marking it as @Scope(value="job", proxyMode=TARGET_CLASS)
关于java - "Step"或 "Job"Spring-Batch bean 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24017673/