2

我在服务器上安装了 Tomcat 和 PostgreSQL。我在尝试使用 c3p0 池从我的 servlet 连接到 PostgreSQL 数据库时遇到连接问题。

如果我在笔记本电脑上本地运行 Tomcat,我可以访问 DB。我也可以使用 psql(即命令行 sql 实用程序)从服务器连接到数据库。但是当我尝试将我的 servlet 部署到服务器并建立连接时,我收到以下错误:

java.sql.SQLException: Connections could not be acquired from the underlying database!
    com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
...
    com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
        com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
        com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
        com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)

我应该检查什么来定位问题?这应该是一个微不足道的问题,但可能是由于凌晨 4 点我遗漏了一些东西:) 提前致谢!

PS:允许从所有网络接口连接到数据库。PostgreSQL JDBC 驱动程序和 c3p0 池分布在 WAR 中。Tomcat 配置是非常默认的。不使用 JNDI。

4

2 回答 2

2

你需要检查几件事:

  1. tomcat 正在使用的 java.policy(例如 /etc/tomcat5.5/policy.d/02debian.policy)
  2. 数据库服务器设置(例如 /etc/postgresql/pg_hba.conf)
  3. 首先尝试在没有池的情况下连接,因为在我的情况下,c3p0 向我隐藏了重要信息
于 2010-02-18T14:35:19.957 回答
2

添加到@Alexey 的回答中,我在 Tomcat 和 PostgreSQL 9.4 中遇到了这个问题。就我而言,md5身份验证方法postgres导致了问题。

如果您使用Windows serveror RHEL server,请确保更新pg_hba.conf文件中的身份验证方法。将其修改为trust并重新启动 postgresql。

于 2016-04-22T17:33:17.277 回答