1.什么是Spring 注解事物:就是直接在Service层的方法上面加上@Transactional注解。
什么是声明试事物:就是使用spring 的AOP配置事物。
2.事物不回滚通常是出现在注解事物或声明式事物,编程式事务一般需要手写回滚 通常不会出问题。
3.常见的事物不会滚通常有以下几种情况:
3.1声明试事物配置的切入点表达式错误,没有切入service中的方法。
3.2service方法中进行了异常捕获,try catch 后只是打印了异常信息没有再抛出
throw new RuntimeException(e)。spring 事物混回滚默认是运行时异常才回滚(RuntimeException)。
3.3 service方法抛出的异常不是运行时异常例如Exception,事物也不会回滚,事物回滚默认是运行时异常(RuntimeException)。
4.如何解决这种问题
4.1 声明试事物:spring AOP的情况
在配置中增加回滚条件你自己可以定义:
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
4.2注解式事物:@Transactional
@Transactional(rollbackFor=Exception.class)
4.3 什么也不修改 在 catch中增加throw new RuntimeException(e)