在编写servlet的时候,出现了这么个情况。就是在大量读写数据库的时候,出现部分请求无法访问到数据库的情况。
使用了jvisualvm等java提供的工具检查之后,发现java的mysql连接占用内存很大,猜测可能是数据库连接使用后没有断开的情况。
于是,我在dao里对数据库操作的里面变了种写法如下:
Session session = this.getSession();
Transaction tx = session.beginTransaction();
try {
tx.begin();
session.save(businessService);
session.flush();
tx.commit();
session.close();
// releaseSession(session);
System.out.println("businessService saving...");
return true;
} catch (DataAccessException e) {
e.printStackTrace();
tx.rollback();
return false;
} finally {
if (session.isOpen()) {
session.close();
}
tx = null;
session = null;
}
原来是没有flush的,但加了flush后还不行。于是最终加上了final来关闭连接,测试之后发现问题解决了。
所以,以后有进行关闭流或者连接操作的时候,一定要记得使用finally来关闭,否则会出问题。至于什么原因导致的连接关闭不成功,现在还不是很清楚,mark一下,希望大神能解答一下。