1,长事务的优化
- 事务的处理需避免长时间。
- 能异步处理的异步处理。
- 涉及加锁的操作放在事务后面,比如更新操作
- 查询操作不涉及事务处理的操作,放到事务外执行(本质还是为了减少事务执行的时间)
- 事务避免远程调用,如果有,设置合理超时时间。
- 事务避免一次处理太多数据,拆分成多个事务分批处理。
2,事务失效的场景
失效的本质是AOP不起作用了。
- 本类中使用this调用,此时的对象不是代理对象,而是原始对象。解决方法:将对象注入自己的类中,此时就是代理对象调用了。
- 方法不是public ,解决方法:开启AspectJ代理。
- 数据库不支持事务。
- 事务的注解没有被spring进行管理。
- 事务里的异常被try catch了。