我有一个简单的 Spring-Service(在其他任务中)使用以下代码启动一个 spring 批处理作业:
@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).
我不能轻易删除现有事务,因为它是由于某些框架代码不在我范围内而隐含的。
那么,在这种情况下,我该如何开始工作呢?新工作不应该使用现有事务。它可以开始自己的事务——但是如何配置它以使其工作?