java – 由于JDBC驱动程序关闭后,Tomcat抱怨因打开连接导致的内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 由于JDBC驱动程序关闭后,Tomcat抱怨因打开连接导致的内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2810字,纯文字阅读大概需要5分钟。
内容图文
![java – 由于JDBC驱动程序关闭后,Tomcat抱怨因打开连接导致的内存泄漏](/upload/InfoBanner/zyjiaocheng/971/2d125cb3bc9a4f739a5c6240105da972.jpg)
我有一个Servlet,它覆盖了init()方法,如下所示:
@Override
public void init() throws ServletException {
BookDAO bookDAO = new BookDAOImpl();
List<Category> categoryList = bookDAO.findAllCategories();
getServletContext().setAttribute("categoryList", categoryList);
}
而BookDAO#findAllCategories是:
@Override
public List<Category> findAllCategories() {
List<Category> result = new ArrayList<>();
String sql = "select * from category";
Connection connection = null;
try {
connection = getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
Category category = new Category();
category.setId(resultSet.getLong("id"));
category.setCategoryDescription(resultSet
.getString("category_description"));
result.add(category);
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
closeConnection(connection);
}
return result;
}
我只是点击这个servlet,所以它被加载.没有别的分数.当我关闭Tomcat时,我得到:
02-Oct-2014 22:29:45.182 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina
02-Oct-2014 22:29:45.189 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.clearReferencesJdbc The web application [/bookwebapp] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
02-Oct-2014 22:29:45.190 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.clearReferencesThreads The web application [/bookwebapp] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
02-Oct-2014 22:29:45.190 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.clearReferencesThreads Stack trace of thread "Abandoned connection cleanup thread":
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)
02-Oct-2014 22:29:45.191 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
02-Oct-2014 22:29:45.193 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
02-Oct-2014 22:29:45.193 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
02-Oct-2014 22:29:45.194 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
Disconnected from server
我错过了什么?
解决方法:
看来你遇到了这个问题:
tomcat7 – jdbc datasource – This is very likely to create a memory leak
具体来说,您将jdbc驱动程序作为war的一部分而不是tomcat lib文件夹.
内容总结
以上是互联网集市为您收集整理的java – 由于JDBC驱动程序关闭后,Tomcat抱怨因打开连接导致的内存泄漏全部内容,希望文章能够帮你解决java – 由于JDBC驱动程序关闭后,Tomcat抱怨因打开连接导致的内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。