(他のタスクの中でも)次のコードでSpringバッチジョブを開始する単純なSpring-Serviceがあります。
@Autowired
private JobRegistry jobRegistry;
@Autowired
private JobLauncher jobLauncher;
public void startMyJob() {
Job job = jobRegistry.getJob("myJobName");
JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
jobLauncher.run(job, jobParameters);
}
これは、Serivce-Method が呼び出されたときにアクティブなトランザクションがない限り、正常に機能します。ただし、アクティブなトランザクションでは、次の例外が発生します。
Caused by: java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
私の手の届かないフレームワークコードが原因で暗示されているため、既存のトランザクションを簡単に削除することはできません。
では、このコンテキスト内でジョブを開始するにはどうすればよいでしょうか? 新しいジョブは、既存のトランザクションを使用しないでください。独自のトランザクションを開始することもできますが、それを機能させるにはどのように構成すればよいでしょうか?