page contents

编程式事务会把数据库锁定吗?

Pack 发布于 2019-12-31 15:57
阅读 872
收藏 0
分类:数据库

佬们,求帮忙看一下数据库锁定的原因。目前我有50w数据,需要更新到数据库,这50w数据库是都存在的,只是进行了业务处理,然后更新回数据库。更新数据库的过程中遇到了数据库被锁,目前不知道问题在哪。同事怀疑说是编程式事务引起的,求大佬帮忙看看我写的编程式事务,是不是有问题


提交代码如下


//如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出

    SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);

    //不自动提交

    try {

List<User> lists = new ArrayList<>(); 

        UserDao userDao = session.getMapper(UserDao.class);

        for (int i = 0; i < list.size(); i++) {

            lists.get(i)

    if(i == 0){

conutie;

    }

            if (i % 400 == 0 || i == list.size() - 1) {

userDao.bacthUpdate(lists);

                //手动每400条提交一次,提交后无法回滚

                session.commit();

                //清理缓存,防止溢出

                session.clearCache();

lists = new ArrayList<>();

            }

        }

    } catch (Exception e) {

        //没有提交的数据可以回滚

        session.rollback();

    } finally {

        session.close();

    }

75
Pack
Pack

你这批量update是根据主键更新的么,

update会根据where条件锁多条语句,除非where条件是主键

请先 登录 后评论