我在配置Tomcat - Spring Batch - Atomikos组合时遇到了麻烦 . 我已经配置了以下内容(我没有提到JMS配置)

  • Atomikos DataSource(代理)基于com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory for Oracle XA数据源 .

  • 基于transactionManager的JtaTransactionManager基于com.atomikos.icatch.jta.J2eeTransactionManager userTransaction,基于com.atomikos.icatch.jta.J2eeUserTransaction

执行批处理作业时,我收到以下错误:

Caused by: java.lang.RuntimeException: Transaction Service Not Running?
    at com.atomikos.icatch.jta.J2eeUserTransaction.checkSetup(J2eeUserTransaction.java:70)
    at com.atomikos.icatch.jta.J2eeUserTransaction.getStatus(J2eeUserTransaction.java:125)
    at org.springframework.transaction.jta.JtaTransactionManager.
        isExistingTransaction(JtaTransactionManager.java:797)

Debugging revealed the following:

Spring Batch使用TaskletStep . 这个类使用一个用DataSourceTransactionManager实例化的PlatformTransactionManager?数据源指的是AtomikosDataSourceBean,看起来没问题 . 我有几个问题:

  • 这个DataSourceTransactionManager来自哪里?我已经定义了一个JtaTransactionManager!

  • 我认为AtomikosDataSourceBean就像一个连接到JtaTransactionManager的代理 . 为什么Atomikos会出现错误“交易服务未运行?”

Spring 季批次:2.1.8

Atomikos:3.9.3