Spring事务管理分编程式事务和声明式事务。
编程式事务使用TransactionTemplate对于事务管理,对于事务的力度更细,但是用起来比较繁琐。
而声明式事务就大大减轻开发量,也是Spring更倡导的方式。声明式事务是基于AOP的思想之上,对方法进行环绕通知 ,只需通过
@Transactional注解的方式或者配置xml方式即可。
@Transactional参数
1、 isolation 并发事务的隔离级别
数据库在多个事务同时执行个更新和查询时候会导致一些问题。并发更新会阻塞加行级锁,数据库默认支持。
1、脏读:后续事务读取到了前面事务提交后回滚的数据。
事务1执行更新将age从20改成了18,事务2读取age=18,事务1异常回滚,age=20,事务2读取的是无效数据。
2、不可重复读(多次读取了另外一个事务的更新操作):事务1读取age=20,事务2将age修改为18,事务再次读取值
为 18,和第一次读取不一致。
3、幻读(多次读取了另外一个事务的新增或者删除操作): 事务1读取一条用户信息,事务2将这条用户信息删除,事
务1再次读取发现这条数据没有了(这类也是正常情况,苛刻情况可以设置表级锁)。
4、第一类事务丢失(回滚丢失):2个事务同时操作一个数据,1事