spring事务

大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,java学习中需要使用的Spring 事务


背景介绍

先给大家讲一个生活中常见的转账案例

张三给李四转账100元。那数据库则需要 张三扣100,李四加100,记录一条流水。

如果转账过程中出现了异常,则可能会导致张三钱转出去了,李四钱没收到,流水也没记录成功。

事务就是用来解决类似问题的。

如果使用事物管理,那整体回滚,张三也没转账成功,李四也没多钱。
事务是一系列的动作,它们综合在一起才是一个完整的工作单元,
这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。
在企业级应用程序开发中,事务管理用来确保数据的完整性和一致性。

2.知识剖析

事务有四个特性:ACID

原子性(Atomicity):一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。

隔离性(Isolation):一个事物的执行,不受其他事务的干扰,即并发执行的事物之间互不干扰,防止数据损坏。</p>

持久性(Durability):一旦事务提交,它对数据库的改变就是永久的,它的结果都不受到错误影响,这样就能从任何系统崩溃中恢复过来。

事务的实现方式

实现方式共有两种:编码方式,声明式事务管理方式.

编程式事务,所谓编程式事务指的是通过编写代码方式实现事务,即类似于JDBC编程实现事务管理。

声明式事务,声明式事务是基于AOP技术实现的,通过AOP技术将事务管理的“切面”代码织入到业务类中。实质就是在方法执行前后进行拦截,然后在目标方法开始之前创建或加入事务,执行完目标方法后根据执行情况提交或回滚事务.

声明式事务管理又有两种实现方式
基于xml配置文件的方式(及AOP方式的事务管理);
另一个是在业务方法上进行@Transaction注解,将事务规则应用到业务逻辑中。


3.常见问题

提问一:两种事务实现方式的区别

提问二:开发中事务方式的使用


4.解决方案

编程式事务可以对指定的方法或指定的方法的某几行添加事务控制。(比较灵活,但开发起来比较繁琐: 每次都要开启、提交、回滚.后期维护起来工作量比较大,维护难度大)

声明式事务最大的优点就是不需要通过编程的方式管理事务,极大的简化了编程式事务管理的操作流程,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式,进一步简化了基于AOP的事务管理,减少了Spring配置代码),便可以将事务规则应用到业务逻辑中。


建议在开发中使用声明式事务,不仅因为其简单,更主要是因为这样使得纯业务代码不被污染,极大方便后期的代码维护。和编程式事务相比,声明式事务唯一不足地方是,只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等</p>


5.编码实战


6.扩展思考


7.参考文献

https://www.cnblogs.com/zhaozihan/p/6219776.html

https://blog.csdn.net/lovesomnus/article/details/52619702

https://blog.csdn.net/scgaliguodong123_/article/details/49814307


8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页