spring mybatis batch操作时关闭sqlsession

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

public  void batchdelete(Collection dataList, final SingleProcessor 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);
		}
	}


你可能感兴趣的:(mybatis)