1、Spring事务失效的几种原因
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、使用的数据库引擎不支持事务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)