2016-10-03 79 views
0

我有一个使用两个不同数据源的Grails 3.1.5应用程序。我的意图是在这两个数据源之间使用两阶段提交/ XA事务。我宣布他们application.yml为:如何配置grails使用单个事务管理器来处理多个数据源?

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内的应用程序,我注意到,春天正在尝试使用ChainedTransactionManager因为有多个事务管理豆类:ChainedTransactionManagerPostProcessor.getTransactionManagerBeanNames(registry)回报[transactionManager, transactionManager_other]

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

回答

1

您可以覆盖指定transactionManager豆使用的事务管理器中grails-app/conf/spring/resources.groovy

您将需要配置一个org.springframework.transaction.jta.JtaTransactionManager和配置设置hibernate.transaction.jta.platformorg.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform

你可能还必须设置hibernate.current_session_context_classorg.springframework.orm.hibernate5.SpringJtaSessionContext

+0

那些是我添加到application.yml性质,或别的地方? ......当你“配置一个JtaTransactionManager”时,你的意思是添加这些属性还是涉及更多?我在网上搜索时很难找到配置这个的具体步骤。 – GreenGiant

+0

我还困惑的是,[文档](http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/jta/JtaTransactionManager.html)似乎以表明JBoss不需要特定于供应商的JtaTransactionManager子类:“对于典型的JTA事务,只需要一个普通的JtaTransactionManager定义,可以跨所有Java EE服务器移植,不需要配置特定于服务器的TransactionManager查找这种JTA用法。“ – GreenGiant

+0

在'grails-app/conf/application.yml'中配置'hibernate.transaction.jta.platform'和'hibernate.current_session_context_class'是 –

相关问题