spring mybatis batch操作时关闭sqlsession

来源:互联网 发布:电脑安装网络调试等 编辑:程序博客网 时间:2024/05/21 06:12

在利用mybatis 的sqlsession,批处理方式打开session,例如

public <T> void batchdelete(Collection<T> dataList, final SingleProcessor<T> processor) {        final SqlSession session = getGenericSqlSessionFactory().openSession(ExecutorType.BATCH);        int i = 0;        for (T data : dataList) {            processor.process(session, data);            if (++i == DEFAULT_COMMIT_COUNT) {                i = 0;                session.commit();            }        }        if (i != 0) {            session.commit();        }        session.close();    }

注意关闭session,若不关闭会很快把数据库链接耗完,导致所有DB操作异常。

存在另一种情况,外层有@Transaction事务管理,此时事务提交后spring也会把connection关闭。

DataSourceUtils:

public static void releaseConnection(Connection con, DataSource dataSource) {try {doReleaseConnection(con, dataSource);}catch (SQLException ex) {logger.debug("Could not close JDBC Connection", ex);}catch (Throwable ex) {logger.debug("Unexpected exception on closing JDBC Connection", ex);}}