我的Java应用程序在本地工作正常,但现在当我在EC2实例(Ubuntu 14,Tomcat 8,PostgreSQL 9.3)上部署它时,我收到以下错误(见下文)。后端是由另一位不再属于团队成员的开发人员编写的。基本上,一旦从下拉菜单中选择了值,就需要显示一些数据。
我一直在谷歌这个问题疯狂,但没有找到解决方案。我以为它可能与jdbc:postgresql://localhost:5432/dbName
有关。我甚至尝试插入实际的IP而不是localhost
,但仍然没有运气。对我来说,连接数据库而不是代码似乎是一个问题。正如我所提到的,它在我的计算机上运行正常。
任何指导都将非常感谢,因为我不是Java专家。谢谢你的帮助。
完整的错误日志如下:
java.lang.NullPointerException
com.app.data.ConnectionPool.freeConnection(ConnectionPool.java:52)
com.app.data.appDB.getData(appDB.java:155)
com.app.servlets.GetAppServlet.processRequest(GetAppServlet.java:42)
com.app.servlets.GetAppServlet.doGet(GetAppServlet.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
答案 0 :(得分:0)
根据您提供的内容很少,我最好的猜测是,您提到的connection.close()
方法是在finally
块中调用的,其中没有检查是否{{1}是connection
。
我想你的代码如下所示:
null
如果Connection connection = null;
try {
connection = getDatabaseConnectionSomehow(...);
// do stuff with database
}
finally {
connectionPool.freeConnection(connection);
}
的跟注产生异常,则在输入getDatabaseConnectionSomehow(...)
数据块时,connection
将为null
。我上面提到的代码不会检查finally
是否connection
,如果您的null
方法在关闭之前也无法检查连接是否为freeConnection
,你会得到一个NullPointerException。
从null
块中抛出的异常将替换在相应的finally
块中抛出的任何异常。所以在你的情况下,你没有看到获得数据库连接的真正异常,因为NullPointerException阻碍了它。
希望添加合适的空值检查可以帮助您找出真正的问题所在。