1.什么是Spring的事务管理?
在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于事务处理的API。Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。
事务的ACID原则:
事务具有4个基本特性:原子性、一致性、隔离性、持久性。也就是我们常说的ACID原则。
原子性(Atomicity):
一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做
一致性(Consistency):
事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
隔离性(Isolation):
事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
持久性(Durability):
一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响
事务传播行为
* 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。
| REQUIRED【默认】 | 当前如果有事务,Spring就会使用该事务;否则会开始一个新事务(增、删、改)
| SUPPORTS | 当前如果有事务,Spring就会使用该事务;否则不会开始一个新事务(查询)
| MANDATORY | 当前如果有事务,Spring就会使用该事务;否则会抛出异常
| REQUIRES_NEW | 当前如果有事务,把当前事务挂起,新建事务
| NOT_SUPPORTED | 当前有事务,Spring也会在非事务环境下执行。如果当前有事务,则该事务挂起
| NEVER | 当前有事务,Spring也会在非事务环境下执行。如果当前有事务,则抛出异常
| NESTED | 当前有事务,则在嵌套事务中执行。如果没有,那么执行情况与REQUIRED一样
2.Spring事务的实现
①xml方式:
applicationContext.xml:主要就是配置平台事务管理器
配置平台事务管理器
先写一个AccountDao
AccountDao
再写一个AccountService
AccountService
测试
异常测试
报了错误,事务不会让其执行
②注解配置事务
创建一个SpingConfig类:和xml内容一样,不过通过类来配置
service和dao类和xml一样
测试:
@RunWith(SpringRunner.class)让测试在Spring容器环境下执行
@ContextConfiguration(classes = {SpringConfig.class})去读取配置类,让我们需要的service等放在容器里
测试类
结果