事务注解@Transactional不起作用的原因总结
程序员文章站
2022-07-12 14:11:11
...
一、事务配置正确的前提下,出现事务不起作用的原因:
异常被try{}catch(){}捕捉到了,有异常就不会回滚。
使用@Transactional注解注意事项:
当本类的使用@Transactional的方法被本类的其它没有开启事务的方法调用时,不会开启事务。
使用@Transactional的方法被其它类调用时,按照正常的事务传播行为规则开启事务
二、数据库引擎要支持事务
如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的
是否开启了对注解的解析
配置文件必须加<tx:annotation-driven />,否则不解析@Transactional
case:
// 自动回滚
@Transactional(rollbackFor = Exception.class)
public void asyncJob() throws Exception {
success();
// 假如exception这个操作数据库的方法会抛出异常,方法success()对数据库的操作会回滚
exception();
}
// 手动回滚(进行try/catch,回滚并抛出)
@Transactional(rollbackFor = Exception.class)
public void asyncJob1() {
success();
try {
exception();
} catch (Exception e) {
e.printStackTrace();
//手工回滚异常
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
// 回滚部分异常
@Transactional(rollbackFor = Exception.class)
public void asyncJob2() {
success();
//设置回滚点,只回滚以下异常
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
try {
exception();
} catch (Exception e) {
e.printStackTrace();
//手工回滚异常,回滚到savePoint
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
}
}
上一篇: Spring IOC
推荐阅读
-
Spring MVC @Transactional注解方式事务失效的解决办法
-
事务注解@Transactional不起作用的原因总结
-
ssm整合后配置的事务不起作用的原因和解决方法
-
spring5 源码深度解析----- @Transactional注解的声明式事物介绍(100%理解事务)
-
解决@Transactional注解事务不回滚不起作用的问题
-
SpringBoot学习-事务注解@Transactional的使用
-
spring结合mysql事务注解@Transactional不起作用的有关问题
-
1、多数据源配置之Transactional注解不同的事务管理器控制
-
spring结合mysql事务注解@Transactional不起作用的有关问题
-
spring5 源码深度解析----- @Transactional注解的声明式事物介绍(100%理解事务)