使用了@Transaction注解依然报TransactionRequireException异常

本文解析了在Spring框架中,@Transaction注解与@PostConstruct注解同时使用导致事务失效的问题,并提供了解决方案。通过使用JdbcTemplate直接执行SQL更新语句,避免了手动事务控制,同时强调了在方法间调用时如何确保事务正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用了@Transaction注解依然报TransactionRequireException异常

今天启动项目的时候失败,报了TransactionRequireException异常,而此异常的产生原因在我印象中是由于进行了增删改操作,而未配置事务造成的,于是找到出错行,发现有@Transaction注解,即应该是配置了事务的,不解下上网一顿百度,找到了原因,是同时使用了@PostConstruct注解和@Transaction注解造成的,二者同时使用会造成@Transaction注解失效。代码如下。
在这里插入图片描述
解决方式:将增删改语句修改为:

@Autowired
private JdbcTemplate jdbcTemplate;
private static String sql = "UPDATE jy_scheduler set task_state = '0' WHERE id = ?";
……
this.jdbcTemplate.update(sql, taskSchedule.getId());

如上,直接使用JdbcTemplae去执行修改语句就可以了,由于是单条sql语句,所以不用去手动控制它的事务。

画重点的地方来了,当你的使用了@Transaction注解的方法是被同类方法调用,事务是不会生效的,这是代理机制的原因,
可以使用本类代理对象去调用来解决这个问题,详情请见博主的这篇博文https://blog.youkuaiyun.com/weixin_41644977/article/details/88747159

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值