Spring事务传播性质导致事务失效

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关键字都会导致事务嵌套统一失败回滚失败。


posted @ 2024-08-06 15:02  逝年的我们  阅读(72)  评论(0编辑  收藏  举报