我使用Apache Camel(2.19)实现Spring Boot(1.5.x)应用程序
出于集成目的,我需要使用三个数据源(有关多数据源的更多信息,请参阅此处:https://github.com/spring-projects/spring-data-examples/tree/master/jpa/multiple-datasources)。
我用.transacted()
标记的其中一条路线:
from(Consts.DIRECT_ROUTE + routeId)
.routeId(routeId)
.startupOrder(loadRouteParameters.getStartupOrderTransformAndLoad())
.autoStartup(true)
.transacted()
但是,当我启动应用程序时,我得到了:
Caused by: java.lang.IllegalArgumentException: Found 3 PlatformTransactionManager in registry. Cannot determine which one to use. Please configure a TransactionTemplate on the transacted policy.
如何处理?如何实现"请配置TransactionTemplate"。我无法找到这个特例的任何例子。
答案 0 :(得分:2)
听起来你的Spring上下文中有多个TransactionManager
bean。骆驼不知道要采取哪一个。你必须帮助你的骆驼。
定义SpringTransactionPolicy
并引用要在Camel路线中使用的TransactionManager
。
<bean id="txPolicyName" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="[yourTxManagerBeanId]" />
</bean>
然后,您可以将策略设置为Camel路由中transacted()
的参数:
.transacted("txPolicyName") // txPolicyBeanId as String