java的框架spring如何配置分布式事务?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的框架spring如何配置分布式事务?相关的知识,希望对你有一定的参考价值。

在配置文件中已经配置了多个数据源 如何配置分布式事务?一般用什么技术?怎么写配置稳定

分布式事务是指操作多个数据库之间的事务,在tomcat下是没有分布式事务的,可以借助于第三方Jotm和Automikos实现,下面就写一个使用Jotm实现分布事务的例子,如有不足,请各位大大指点:

    Dao及实现,先写出一个interface再去实现他,可能有些人觉得直接写实现类多好,但我还是建议为了结构清晰,增强代码的可读性,可维护性还是先写接口再去实现的好: 

    先写一个interface,定义要实现的方法:


    实现接口,传入一个String ds来判断调用哪个JdbcTemplate:


    service及实现:

    还是接口与他的实现:

    持久化的操作:

    applicationContext.xml

    基本的spring配置以及Jotm bean;

    JTA事务管理器,数据源datasourceA和datasourceB配置:

    事务切面配置aop,通知配置以及dao,service配置:

    单元测试,在实际项目中就是写一个controller:

参考技术A 分布式事务本身不是程序做的,我们不需要在代码中明确地做这些事,因为是不是分布式对于代码来说,代码写起来完全相同。
只是选择支持 JTA XA (也叫 2-Phase Commit, 2PC) 的数据源就可以了,你默认使用的 DataSource 可能不是 XA ( Weblogic 把它叫 TX)。

一般在网站编程时多数人可能是用 Spring 搭配 tomcat commons-dbcp 那个数据源,那个可能就不是支持 XA 的数据源,如果你打算在复杂企业应用生态系统中使用J2EE 就不要用 Spring 提供 commonbs-dbcp 那种小作坊式的做法,因为它是假设自己的程序就是独立生态系统,当你需要与外界打交道时就碰到诸多问题,这也是为什么很多大企业依然还是会使用 EJB 的原因(EJB 已经考虑到这点,并把它写入到J2EE 标准中),我们推荐用服务器自己的数据源,也就是 lookup JNDI,这样的话,是不是 XA 事务就由服务器的配置来定制,代码就不需要任何配置来决定是不是 XA 了 ;事务本身是不是 XA (分布式的)是服务器的事,服务器来管理“资源” (包括数据源,JMS 连接等,一个资源(JDBC连接)如何参与事务是“资源管理器”(驱动程序)的职责,跟程序无关),服务器提供事务管理并作为“事务协调者”来处理多个“资源管理器”(不同的数据库连接)之间的事务一致性,,而 Spring 的职责很简单,对于我们希望 Spring 自动提交或回滚事务时,在配置中指定需要回滚的异常的类型。

不过我没有实际使用过 Spring,我有多年的 EJB 经验,这其中的原理是相同的,因为这是 J2EE 标准规范要求达到的。

以上是关于java的框架spring如何配置分布式事务?的主要内容,如果未能解决你的问题,请参考以下文章

java程序员在面试中被问到如何配置多数据源以及如何配置多数据源下的分布式事务,该怎么回答?看清再做答

如何实现一个TCC分布式事务框架的一点思考

微服务框架Spring Cloud之使用事件和消息队列实现分布式事务

重学Springboot系列之整合数据库开发框架---下

Spring Cloud Alibaba系列之分布式事务Seata

目前主流的Java分布式框架都有哪些,学起来难不难?