海外医疗兼职网站建设,开发app需要什么,久久建筑网图集下载,产品型网站目录
前言
使用场景 1.单个方法层面 2.类级别使用 3.指定异常回滚 4.跨方法调用事务管理 5.只读事务
6.设置超时时间#xff0c;超时则自动回滚 7.隔离级别设置
章末 前言 小伙伴们大家好#xff0c;ACID#xff08;原子性#xff0c;一致性#xff0c;隔离…
目录
前言
使用场景 1.单个方法层面 2.类级别使用 3.指定异常回滚 4.跨方法调用事务管理 5.只读事务
6.设置超时时间超时则自动回滚 7.隔离级别设置
章末 前言 小伙伴们大家好ACID原子性一致性隔离性持久性特性相比大家都很熟悉每种的实现方式也都不同原子性的要求是指一个操作要么全部执行成功要么全部失败回滚不会存在部分成功或者失败的情况意味着在一个事务中的操作要么全部生效要么全部取消以此保证数据的一致性和完整性。在SpringBoot 项目中就有Transactional事务注解并且可以支持各种场景的使用
使用场景 1.单个方法层面 手动抛出一个运行时异常postman测试下事务是否回滚如图在控制台成功打印了插入日志然后抛出了自定义异常检查下数据库确实没有该条数据测试成功 2.类级别使用 比如 需要控制整个业务实现类都要回滚可以将注解加到类上方表明所有方法会在一个事务中执行
Service
Transactional
public class UserService {Autowiredprivate UserRepository userRepository;public void updateUser(User user) {userRepository.save(user);}public void addUser(User user) {userRepository.add(user);}...
} 3.指定异常回滚 在Spring中默认情况下只有当抛出的异常是 RuntimeException 或者子类时事务才会回滚为了让事务在抛出 Exception 也回滚可以通过自定义配置 rollbackfor 属性来指定需要回滚的异常类型 通过测试发现控制台正常打印插入日志然后抛出异常数据库中不会有该条数据回滚成功 4.跨方法调用事务管理 在当前使用了事务方法中调用另一个方法并且该方法需要事务管理可以使用 Propagation.REQUIRES_NEW 属性开启如下把抛出异常的代码块放到单独的方法中并且将这段调用方法捕获打印 即在同一个类中saveUser方法会在一个新的事务中执行不受外部事务的影响 测试结果如下由于手动捕获的原因现在可以正确插入数据 5.只读事务 在注解上面开启属性默认为false) 则该方法中涉及到的操作限制为只读 测试如图控制台提示操作失败原因是该连接限定了只读 6.设置超时时间超时则自动回滚 测试如下设置时间为1s (默认单位秒看到控制台提示超时信息 7.隔离级别设置 Mysql中的隔离机制默认是可重复读可以解决幻读两次查询中间有新数据提交和不可重复读的问题两次查询中间有老数据修改可重复读的原理大概是用到了MVCC多版本并发控制第一次查询的时候会生成当前版本的视图后面查询也是查这里的数据 isolation指定事务的隔离级别默认为 Isolation.DEFAULT。事务隔离级别决定了多个事务之间的相互影响程度。常见的隔离级别包括 Isolation.DEFAULT使用默认的隔离级别。Isolation.READ_UNCOMMITTED允许读取未提交的数据变更。Isolation.READ_COMMITTED只能读取已提交的数据变更。Isolation.REPEATABLE_READ可重复读取相同的数据直到事务结束。Isolation.SERIALIZABLE所有事务依次执行避免并发问题。 章末 文章到这里就结束了~