如何在每个作业执行中仅保留一个事务?

时间:2018-12-13 12:28:54

标签: spring spring-batch spring-transactions

我的spring-batch配置包含一个包含多个步骤的作业。在一个步骤中,我从JMS队列中读取消息,而在另一步骤中,我将数据写入数据库。 我希望整个作业在同一JTA事务中执行

问题

  1. 当我使 reader @Transactional时,job reader 接收到{{1} }排队,然后JMS writer 启动新事务。它不允许我在每个作业执行时保留单个事务;
  2. 当我创建作业启动器 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

0 个答案:

没有答案