- spring中的事务管理是依赖aop,可以使用@Transactional注解实现事务
且ab两个方法,a方法调用b方法,都有这个注解的情况下,b不能直接用new 构造器或者this引用,而是应该通过注入b所在类为bean,通过这个bean去引用b,这样a和b才在一个共同的事务中,否则b是不会参与到a的事务中的。new 构造器形成的对象是被代理对象,被spring管理的类形成bean是代理对象,代理对象才会参与事务 - a接口调用b接口,b接口正常执行,a接口调用完b接口后报错,a接口的内容会回滚,b不会回滚,因为b已经完成一个请求事务,对a的异常已经无从感知;若b报异常,a会感知到,ab都会回滚。
- 一个接口,abc三步,第一次请求,在a处改变某个表中字段的值,在c处打断点,另一个接口在b处查a处那个字段,此时查出来的值应该是a处值改变之前的数据,因为事务具有隔离性,且myslq默认是可重复度,未提交读导致的脏读不会发生。
- 即使加了@Transactional注解,但在方法中又使用了try catch来捕获异常,那么事务不会回滚,想回滚可以在catch中抛出异常,或者手动回滚事务(TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();)
- try catch finally 执行顺序,try中没异常,catch不会执行,finally会执行,try catch中又return,会先执行finally再执行return
事务研究之路记录
于 2022-10-27 22:52:33 首次发布