this导致事务失效的原因 当我们在一个事务中调用另一个对象的方法时,如果这个方法中使用了this关键字,事务可能会失效。这是因为this关键字代表当前对象的引用,
而事务是基于数据库连接的,每个数据库连接有自己的事务上下文。如果在一个事务中调用另一个对象的方法,而这个方法中使用了this关键字,
并且这个方法中开启了新的数据库连接,那么这个新的数据库连接将无法参与到原有的事务中,从而导致事务失效。
来都来了,扫下二维吗关注一下吧!
下面是一个示例代码,展示了this关键字导致事务失效的情况:
public class UserService { private UserDao userDao; public void updateUser() { // 获取数据库连接 Connection conn = getConnection(); try { conn.setAutoCommit(false); userDao.updateUser(conn); // 更新用户信息 conn.commit(); } catch (SQLException e) { if (conn != null) { try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } public class UserDao { public void updateUser(Connection conn) { // 更新用户信息 this.insertLog(conn); // 调用了另一个对象的方法 } private void insertLog(Connection conn) { // 插入日志信息 } }标签:事务,Spring,try,关键字,失效,public,conn From: https://www.cnblogs.com/wwwcf1982603555/p/18345166
注意:如果业务场景需要事务嵌套,我们需要慎用try 进行异常捕获,也需要慎用this关键字都会导致事务嵌套统一失败回滚失败。