【发布时间】:2025-11-28 18:55:02
【问题描述】:
我正在尝试为配置了 Spring Boot 的 Spring Batch/Spring Cloud 任务应用程序配置 XA/分布式事务。
我添加了以下依赖项,希望依赖于spring boot自动配置:
compile("org.springframework.boot:spring-boot-starter-jta-atomikos")
但是,以下两个类会导致配置两个事务管理器:
org.springframework.cloud.task.configuration.SimpleTaskConfigurationorg.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration
查看以下消息:
2016-07-18 21:46:19.952 INFO 18995 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'transactionManager' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/batch/core/configuration/annotation/SimpleBatchConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.cloud.task.configuration.SimpleTaskConfiguration; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in org.springframework.cloud.task.configuration.SimpleTaskConfiguration]
然后因为配置了一个名为 transactionManager 的 PlatformTransactionManager,所以我的 atomikos 自动配置没有被选中:
AtomikosJtaConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.transaction.jta.JtaTransactionManager,com.atomikos.icatch.jta.UserTransactionManager (OnClassCondition)
- @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found the following [transactionManager] (OnBeanCondition)
有人可以帮我防止上述两个类对 transactionManager bean 的过度强制吗?
【问题讨论】:
-
您能否提供一个重现您的问题的可运行示例(build.gradle 和应用程序类)?因为,就像你之前的问题一样,没有它,我们所能做的就是把我们的猜测和假设扔给你,然后最终什么都不做。
-
我正在尝试组合一个示例应用程序来重现此内容。忍受我。
-
太棒了,谢谢,这应该很容易解决问题
-
这里是:github.com/balteo/atomikosIssue 唯一的要求是 Docker/Docker-compose 和 Java。
标签: spring-boot spring-batch distributed-transactions spring-cloud-task