我在 Springboot 3 中有 Atomikos (6.0.0),并使用 Java 21。它可以工作,但使用 @Deprecated 类“ChainedTransactionManager(transactionManagerOne, transactionManagerTwo)”。如果事实上这种方式向我显示了很多我不喜欢的警告,我想使用推荐的方式。
到处找,告诉我用这个:
@Bean
public UserTransaction userTransaction() {
//uses javax.transaction.*
return new UserTransactionImp();
}
@Bean(initMethod = "init", destroyMethod = "close")
public TransactionManager transactionManager() {
//uses javax.transaction.*
return new UserTransactionManager();
}
@Bean
public PlatformTransactionManager platformTransactionManager() throws Throwable {
//using jakarta.transaction.*
return new JtaTransactionManager(userTransaction(), transactionManager());
}
但我的问题是对象 JtaTransactionManager 来自新的 spring-tx-6.1.6,它使用 jakarta.transaction.UserTransaction 和 jakarta.transaction.TransactionManager 对象,但是对象 new UserTransactionImp() 和 new UserTransactionManager() 使用旧方法,在 jar transaction-jta-6.0.0 中使用 javax.transaction.UserTransaction 和 javax.transaction.TransactionManager。
如何使 new UserTransactionImp() 和 new UserTransactionManager() 与“jakarta.transaction.*”兼容?
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-spring-boot3-starter</artifactId>
<version>6.0.0</version>
</dependency>
我注意到 transaction-jdbc
、
transaction-jms
和
transaction-jta
会自动导入,并以
jakarta
作为分类器,因此在类路径中有
transaction-jdbc-6.0.0-jakarta.jar
等等。查看repo目录(
https://repo1.maven.org/maven2/com/atomikos/transactions-jta/6.0.0/)实际上有两个不同的jar。
检查您是否正在导入“no-jakarta”模块,在这种情况下尝试使用启动器,或在 pom.xml 中指定分类器,如下所示:
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jta</artifactId>
<version>6.0.0</version>
<classifier>jakarta</classifier>
</dependency>