使用了@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。