请在事务策略上配置TransactionTemplate

时间:2018-03-15 19:44:34

标签: spring-boot apache-camel

我使用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"。我无法找到这个特例的任何例子。

1 个答案:

答案 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