在上周进行MongoDB的POC验证中,为了初始化数据,写了一段代码将MySQL数据库的复制n份并copy到MongoDB中。在这过程中使用了MyBatis访问MySQL,由于循环查询数据库数据,所以每次查询完数据后并没有关闭SqlSession,造成了内存泄露。
程序片段代码如下,然后实际中启用5个线程同时执行。
public void copyReply2MongoDB() {
MongoDao mongoDao = new MongoDaoImpl();
SqlSession sqlSession = null;
List<Map<String, Object>> replyList = null;
MySQLDao dao = null;
try {
sqlSession = DBUtil.getSqlSessionFactory().openSession();
for (int i = 0; i < 125; i++) {
dao = sqlSession.getMapper(MySQLDao.class);
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("offset", i * BATCH_SIZE);
paramMap.put("limit", BATCH_SIZE);
replyList = dao.queryReply(paramMap);
LOGGER.info(getName() + " begin insert, i = " + i);
long start = System.currentTimeMillis();
for (Map<St