我的spring-batch
配置包含一个包含多个步骤的作业。在一个步骤中,我从JMS
队列中读取消息,而在另一步骤中,我将数据写入数据库。 我希望整个作业在同一JTA
事务中执行
问题
@Transactional
时,job
在 reader 接收到{{1} }排队,然后JMS
为 writer 启动新事务。它不允许我在每个作业执行时保留单个事务; job
时,作业执行失败并显示
@Transactional
显然,
java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
类adds additional adviser用于检查是否存在活动的事务,如果存在,则JobRepositoryFactoryBean
会引发异常。
我如何满足要求?我剩下的唯一想法是采用某种adviser
配置方法(例如,在AbstractJob#execute上添加一个Inceptcepter)。
我使用AOP
管理Atomikos
交易。 JTA
有自己的JobRepository
实例和自己的DataSourceTransactionManager
。