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) {// 插入日志信息 } }
注意:如果业务场景需要事务嵌套,我们需要慎用try 进行异常捕获,也需要慎用this关键字都会导致事务嵌套统一失败回滚失败。