Spring事务失效的几种原因
1、Bean没有被Spring管理,即类上没有加入@Service、@Component等注解。
2、方法没有使用public修饰
加@Transactional
注解的方法必须用public
关键词修饰,方法的修饰符为:private
、default
、`protected时都不会生效。
3、数据源没有开启事务管理器,如下:
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
4、事务的传播机制未正确使用
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void updateOrder(Order order) {
// update order
}
}
5、使用了异常处理,但重新抛出的异常不是运行时异常例如,抛出了:
throw new Exception("更新错误");
此时需要在注解上加入:
@Transactional(rollbackFor = Exception.class)
6、注解修饰的方法为非public时,@Transactional不会起作用。
7、同一类内,调用带有@Transactional注解的方法不会生效
8、在@Transactional注解修饰的方法内使用try...catch...捕获异常,在catch内不抛出新的异常
9、使用的数据库引擎不支持事务
标签:事务,Spring,Transactional,几种,失效,修饰,注解,public From: https://www.cnblogs.com/zhangruifeng/p/16899442.html