spring 两种数据源 怎么将这种数据源 放在同一事物中处理?

2025-03-23 00:57:31
推荐回答(1个)
回答1:

使用JTA事务,jboss,weblogic,websphere 等等ejb容器都自带了jta事务的支持,如果你使用tomcat,jetty或者其他web容器,则需要安装第三方的jta插件,假定这里使用jboss容器,则需要在jboss中配置JNDI数据源,比如有两个mysql的数据源需要被JTA管理,则需要在jboss的server/default/deploy目录下新建两个数据源文件app1-ds.xml和app2-ds.xml,这里只拿一个文件做例子,内容如下所示:


MySqlDS1

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource


jdbc:mysql://localhost:3306/test

root
root
false
true

org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter


mySQL



完成JNDI数据源配置后,需要在spring中获取JNDI数据源,配置如下:








然后定义JTA事务如下:
class="org.springframework.transaction.jta.JtaTransactionManager">



通过声明式事务模板(代理),指定目标类的特定方法采用JTA事务:
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">








PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED