浅谈 Spring 声明式事务
事务
事务的四大特性(ACID)
原子性:一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了。
经典的例子:比如你从取款机取钱,这个事务可以分成两个步骤
1、插卡,2、出钱。不可能插了卡,而钱却没出来。这两步必须同时完成,要么就不完成。
一致性:事务的运行并不改变数据库中数据的一致性。
隔离性:数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性:事务执行成功以后,该事务对数据库所作的更改是持久的保存在数据库中
事务在项目开发过程中,十分重要,涉及数据的一致性问题,不能马虎
确保完整性和一致性
Spring中的事务管理
- 编程式事务管理
- 将事务管理代码嵌到业务方法中来控制事务的提交和回滚
- 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码
- 声明式事务管理
- 一般情况下比编程式事务好用。
- 将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。
- 将事务管理作为横切关注点,通过
aop
方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。
JDBC事务
1 | <!-- 配置事务管理器 --> |
配置好事务管理器后我们需要去配置事务的通知
1 | <!--结合AOP实现事务的织入--> |
为什么需要事务?
- 如果不配置事务,可能存在数据提交不一致的情况下
- 如果我们不在
Spring
中去配置声明式事务,那么就需要在代码中手动配置事务,但我还是喜欢声明式事务
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小嘉的部落格!
评论