投影片~~~~~~~
也就是說開發中不關心如何去開啟事務、提交、回滾...等,由 Spring 管理。
====================
第二種就是所有的 service 以 add or update 開頭的方法全都是事務的方法。
但推薦第三個,一種約定,看到這標註就要特別注意。
聲明式事務獨有的概念,跟 MySQL沒關係。
propagation_required 當有新事物進來如果有就加入原有事務,否則創新的。
====================
拋出 checked exception 不會回滾
try-catch spring 會感知不到
## 使用注解控制方法的优点
* 1.开发团队达成一致的约定,明确标注十五方法的编程风格
* 2.保证事务方法的执行时间尽可能短,不要穿插其他的网络操作 RPC/HTTP请求/或者剥离到事务方法外部
* 3.不是所有的方法都需要事务,如只有一条修改操作,或者只读操作。
## 声明事务的使用方式



推荐使用第三种方式

抛出运行期异常RuntimeException时才rollback;
声明式事务使用方式
声明式事务使用方式
声明式事务使用方式
什么时候回滚事物:
1、如果抛出的是运行期异常的时候事物回滚,如果抛出的是非运行期异常的话就不会事物回滚(就会产生部分成功,部分失败)。
2、小心不当的try-catch,如果你把可能会出现异常的代码用try-catch包括起来之后,spring就感知不到你的程序发生异常了,就会commit。所以开发的时候一定要理解spring声明式事物开发的一些默认行为, 才能够开发出正确的事物控制的程序。
事务方法嵌套:
1、声明式是事务独有的概念就是事务方法嵌套。
2、这是他独有的概念,跟mysql没有关系,体验在他的传播行为上,放我们有多个方法调用的时候,他是创建一个新事物还是加入到已有的事物的时候,这是他的传播行为的一个体现,spring默认的行为那就是propagation_required (当有一个新的事物加入进来的时候,是直接加入到原有的事物里边,如果有就加入,没有就创建一个)

声明式事物的使用方法和实现方式:
声明式事务使用方式
12121212121212
12121212121212
12121212121212
什么时候事务回滚?
抛出运行期异常的时候,会回滚事务。
注意的就是:代码中的try——catch捕获异常的时候,如果将运行期异常捕获,代码会认为捕获后的运行期异常不再是异常,也就不会回滚事务。这就容易造成事务控制的代码部分成功,部分失败的问题
声名式事务常见的3中方式 早期:proxyFactoryBean+xml 现在常用的是tx:advice+aop命名空间 比如可以将某路径下文件中update**、delete**开头的类全部认定是事务方法,缺点在于浪费资源,且不容易代码二次开发 注解@transactional,这种用注解去标注事务的方法可以更灵活的去配置,而且代码容易被理解和二次开发
spring事务嵌套,不是mysql事务嵌套
声明式事务使用方式
声明式事务
什么时候回滚
声明式事务使用方式
建议使用第三种@Transactional
非运行期异常事务不回滚
声明式事务使用方式
声明式事务就是把事务交给第三方框架处理
什么时候回滚事务:方法抛出运行期异常(RuntimeException)时才会回滚。小心不当的try-catch.
注解@Transactional 标注在方法上之后,方法会被spring管理,会在进入和退出该方法是,自动加上事务控制的逻辑。
事务方法嵌套:声明式事务独有的概念。
什么事声明式事务:
目的:交给第三方框架spring来管理,解脱事务代码。(开发时不用关注什么时候开启事务,什么时候提交,什么时候回滚)
声明式事务的使用方式
什么时候事务回滚
声明式事务使用方式