如何配置grails以将单个事务管理器用于多个数据源?

时间:2016-10-03 20:43:34

标签: grails spring-boot

我有一个使用两个不同数据源的Grails 3.1.5应用程序。我的目的是在这两个数据源之间使用两阶段提交/ XA事务。我在application.yml中将它们声明为:

dataSources:
    dataSource:
        dialect: "org.hibernate.dialect.Oracle10gDialect"
        jmxExport: false
        jndiName: "java:/applicationUserDS"
    other:
        dialect: "org.hibernate.dialect.Oracle10gDialect"
        jmxExport: false
        jndiName: "java:/otherUserDS"
        name: "other"

但是,当我在JBoss EAP 6中运行应用程序时,我注意到Spring正在尝试使用ChainedTransactionManager,因为有多个事务管理器bean:ChainedTransactionManagerPostProcessor.getTransactionManagerBeanNames(registry)返回[transactionManager, transactionManager_other]

有没有办法配置grails / spring引导,以便它只创建一个事务管理器并将它用于两个数据源?

1 个答案:

答案 0 :(得分:1)

您可以通过在transactionManager

中指定grails-app/conf/spring/resources.groovy bean来覆盖使用的事务管理器

您需要在配置中配置org.springframework.transaction.jta.JtaTransactionManager并将hibernate.transaction.jta.platform设置为org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform

您可能还需要将hibernate.current_session_context_class设置为org.springframework.orm.hibernate5.SpringJtaSessionContext