[英]Java App Does Not Load Data from PostgreSQL
我的Java应用程序在本地运行良好,但是现在当我将其部署到EC2实例(Ubuntu 14,Tomcat 8,PostgreSQL 9.3)上时,出现以下错误(请参见下文)。 后端由不再属于团队的另一位开发人员编写。 基本上,一旦从下拉菜单中选择了一个值,它就需要显示一些数据。
我一直在Google上发疯,但没有找到解决方案。 我以为它可能与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)
根据您提供的内容,我的最佳猜测是,您提到的connection.close()
方法是在finally
块中调用的,该块中没有任何检查以查看connection
是否为null
。
我想你的代码看起来像下面这样:
Connection connection = null;
try {
connection = getDatabaseConnectionSomehow(...);
// do stuff with database
}
finally {
connectionPool.freeConnection(connection);
}
如果getDatabaseConnectionSomehow(...)
的calll引发异常,则在进入finally
块时, connection
将为null
。 我上面提供的代码不会检查connection
是否为null
,并且如果您的freeConnection
方法在关闭连接之前也无法检查连接是否为null
,则会得到NullPointerException。
从finally
块中引发的异常将替换在相应try
块中引发的任何异常。 因此,在您的情况下,您看不到真正的异常获取数据库连接,因为NullPointerException妨碍了您。
希望添加适当的空检查应该可以帮助您找出真正的问题所在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.