我在使用 springboot整合activerecord时,发现spring的事务并不起作用,查了下 activerecord 包的源码发现 Model save 或 update 方法执行完成后会调用config.close(pst, conn); 关闭连接,再看Config 里close 方法有个判断:
if (threadLocal.get() == null) { // in transaction if conn in threadlocal
if (conn != null) {try {conn.close();}
catch (SQLException e) {throw new ActiveRecordException(e);}}
}
而我使用spring 注解的事务@Transactional 后这个 threadLocal.get() 一直都是空值,所以出现spring的事务失效,而出现脏数据,如:
@Transactional
public void save(){
try{
User user1 = new User();
user1 .set("id",1);
user1 .set("name","JFinal1");
user1.save();
User user2 = new User();
user2 .set("id",1);
user2 .set("name","JFinal111111111111111111111111111111111111111111111111111111111");
user2.save();
}
catch (Exception e) {
log.error("数据库操作失败",e);
throw new BizLayerException("数据库操作失败");
}
}
当第二个保存因字段长度不够报错后抛出异常,但第一个还是提交数据库了,请问有什么解决方案,确保spring的事务有效,谢谢!