我有一个使用 Postgresql 作为数据库的 J2EE 应用程序 (Tomcat)。此应用程序在开发过程中运行良好,但在临时环境中尝试时失败。
我怀疑我遇到了某种数据库通信问题,但我没有收到任何错误来准确指出问题所在。有人能用简单的方法显示我的应用程序已成功连接到数据库并运行查询吗?
我对数据库问题的证据来自对代码的检查。我得到了一个空指针异常,如果代码以某种方式无法将对象插入数据库,则最有可能返回空指针。
出于兴趣,我的暂存环境是在 EC2 上运行的 Ubuntu,并且此应用程序使用 Spring JDBC 进行大多数数据库访问。哦,是的,我在 tomcat lib 目录中确实有 postgresql JDBC jar(尽管文档中似乎存在一些关于它应该放在 lib 还是 common/lib 中的分歧)。我也是个坏孩子,一直在对扩展的 WAR 文件进行更改以尝试不同的东西。
我已经关闭了 Tomcat 安全管理器,并且以 postgres 超级用户身份进行连接(是的,我知道这两件事从长远来看都是不好的,但如果它在我添加限制之前开始运行就好了)。
非常感谢您的帮助。
答案1
查看您的 postgres 日志,如果连接失败,您应该会看到 FATAL 消息。如果没有,则可能是您甚至无法访问数据库,因此您需要验证没有任何障碍(防火墙、selinux 等)和/或数据库的配置是否符合您的代码期望。
另一个技巧是尝试使用不同的客户端(我推荐使用 psql)和与代码相同的凭据连接到新服务器。如果您可以使用 psql 连接,则说明您的代码存在问题;如果不能,则问题可能出在数据库或数据库配置本身上。
答案2
只需打开查询日志(设置log_min_duration_statement
为0
)即可向您显示(a)正在执行的查询,以及(b)每个查询花费了多长时间(现在可能不是那么有趣,但给它时间......)。