バッチインポートにSpring-Batchv3.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;
}
しかし、どのスコープがここにありますか?なぜ?
step
スコープでの実行は機能しますが、itemWriterはすべてのステップで再作成されないようにjob
スコープである必要があると思います。
step
をjob
に切り替えようとしましたが、次のエラーがスローされます:Exception in thread "main" Java.lang.IllegalStateException: No Scope registered for scope 'job'
Spring-Batch v3.0.1以降、@ JobScopeを使用できます
@Beanを@JobScopeとしてマークすることは、@ Scope(value = "job"、proxyMode = TARGET_CLASS)としてマークすることと同じです。
了解しました。スコープは、@Configuration
ファイル内で明示的なBeanとして指定する必要があります。
@Bean
public JobScope jobScope() {
return new JobScope();
}