spring 事务控制

spring支持编程式事务和声明式事务:

编程式事务:是需要在方法中加入Spring的事务API 例如hibernate中的 beginTransaction() commit() rollback。。。。更加具有细粒度,但是同时也增加了代码的倾入性

声明式事务:在配置文件中配置,无需程序员手动编程控制事务,也就是说数据库的事务的开启,提交都是框架帮助我们做好的,本质上是建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务--是spring所倡导的非侵入式的开发方式。一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。

两种方式比较:

和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等

 

声明式事务管理的两种方式:

1.基于tx和aop命名空间的xml配置文件格式

2.基于@Transaction注解 : @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性                                            

              @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private  或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

               @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。

 

spring+mybatis 多数据库事务管理:一个方法里面能同时对两个数据库的数据进行操作 :https://zhidao.baidu.com/question/1928811909233574387.html

Spring Boot Druid 多数据源 Atomikos 分布式事务:https://blog.csdn.net/a510835147/article/details/75675311

posted on 2018-06-29 14:04  zhufei2007fang  阅读(101)  评论(0编辑  收藏  举报