【问题标题】:c3p0 pool cannot establish a connection. How to debug this?c3p0 池无法建立连接。如何调试这个?
【发布时间】:2011-01-11 02:35:54
【问题描述】:

我在服务器上安装了 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。

【问题讨论】:

  • 您检查过 Postgres 日志中的身份验证失败吗?
  • 感谢您的建议。实际上我发现了问题——服务器 Tomcat 上的安全策略不允许我连接。只有没有连接池的特殊测试 servlet 才发现问题。

标签: postgresql tomcat connection c3p0


【解决方案1】:

你需要检查几件事:

  1. tomcat 正在使用的 java.policy (例如。 /etc/tomcat5.5/policy.d/02debian.policy)
  2. db 服务器设置(例如 /etc/postgresql/pg_hba.conf)
  3. 先尝试在没有池的情况下连接 就我而言,c3p0 向我隐藏了重要信息

【讨论】:

  • 尝试不使用池连接首先解决了我的问题。 c3po 隐藏内部异常。在我的例子中:连接字符串中使用的 Oracle 用户被锁定。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2013-08-20
    • 2017-09-25
    • 2012-01-15
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多