【问题标题】:Datanucleus + Postgres 9.3 + Amazon RDS failureDatanucleus + Postgres 9.3 + Amazon RDS 故障
【发布时间】:2023-03-10 19:45:01
【问题描述】:

标题几乎说明了一切。

我正在开发一个Java 网络应用程序,托管在Elastic Beanstalk 中,使用Datanucleus 4.0.6postgresql 9.3 数据库通信。数据库托管在Amazon RDS

我已经尝试了所有我能想到的设置组合:

  • 让 beanstalk 创建数据库
  • 手动创建私有数据库
  • 手动创建公共数据库
  • 将公共/私有 DB 分配给所有可用的 VPCs
  • 使用 postgres 9.4 而不是 9.3

无论我做什么,在尝试开始与数据库通信时都会收到以下错误消息。

 No suitable driver found for jdbc:postgresql://myvalidurl.com:5432/ebdb

如果我让myvalidurl 绝对无效,我会得到同样的错误,所以我无法判断我是否根本无法“看到”数据库,或者端口是否已关闭,或者它是否只是没有说出预期的类型的postgres。

最后,我可以用本地数据库运行它,一切正常。

有人知道我在配置Elastic BeanstalkRDS 交谈时可能错过了什么吗?

【问题讨论】:

  • 为什么不只写几行 JDBC 代码,加载驱动程序并尝试访问 URL 并查看 JDBC 抛出的异常,包括堆栈跟踪?
  • 我刚刚尝试过,它成功了......这使得 JDO 失败更加令人困惑。
  • 所以看看抛出的堆栈跟踪并与你正在做的比较......有区别吗? JDO 可能将连接池用于一件事

标签: java postgresql amazon-elastic-beanstalk datanucleus amazon-rds


【解决方案1】:

当 postgre-jdbc.jar 在 your.war#WEB-APP/lib/ 文件夹中时会发生这种错误。从那里将其删除并将其放入 $CATALINA_HOME/lib/ 文件夹中,它会正常工作。

问题出在 DriverManager 类使用的类加载器中。

【讨论】:

  • 这不是问题。
【解决方案2】:

原来Elastic Beanstalk 的默认Tomcat 8 安装包括commons-poolsdbcpDatanucleus 使用 dbcp 实现连接到数据库,无论出于何种原因,完整的 jdbc URI 都没有在调用链中一路向下传递。

我确定这是某种persistence.xml 类型的配置问题,但就我而言,解决方案很简单:

<property name="datanucleus.connectionPoolingType" value="None"/>

【讨论】:

  • 我认为默认情况下 DataNucleus 实际上会使用内置 DBCP,而不是 CLASSPATH 中的其他一些 dbcp jar。但是您仍然可以选择使用任何其他连接池
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多