web-dev-qa-db-ja.com

Spring-Batch Beanの「ステップ」または「ジョブ」スコープ?

バッチインポートにSpring-Batchv3.0.0を使用しています。 StepScopeJobScopeがあります。どれが適切かをどうやって知ることができますか?

たとえば、特定の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スコープである必要があると思います。

stepjobに切り替えようとしましたが、次のエラーがスローされます:Exception in thread "main" Java.lang.IllegalStateException: No Scope registered for scope 'job'

10
membersound

Spring-Batch v3.0.1以降、@ JobScopeを使用できます

@Beanを@JobScopeとしてマークすることは、@ Scope(value = "job"、proxyMode = TARGET_CLASS)としてマークすることと同じです。

7
Eiland

了解しました。スコープは、@Configurationファイル内で明示的なBeanとして指定する必要があります。

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