Datanucleus + Postgres 9.3 + Amazon RDS 失败
Datanucleus + Postgres 9.3 + Amazon RDS failure
标题几乎说明了一切。
我正在开发 Java
网络应用程序,托管在 Elastic Beanstalk
使用 Datanucleus 4.0.6
与 postgresql 9.3
数据库通信。数据库位于 Amazon RDS
.
我已经尝试了所有我能想到的设置组合:
- 获取 beantalk 以创建数据库
- 手动创建私有数据库
- 手动创建 public 数据库
- 正在将 public/private 数据库分配给所有可用的
VPCs
- 使用 postgres 9.4 而不是 9.3
无论我做什么,在尝试开始与数据库通信时都会收到以下错误消息。
No suitable driver found for jdbc:postgresql://myvalidurl.com:5432/ebdb
如果我使 myvalidurl
绝对无效,我会得到同样的错误,所以我无法判断我是否根本无法 "see" 数据库,或者端口是否已关闭,或者它是否以某种方式关闭'说出预期的 postgres 类型。
最后,我可以 运行 使用本地数据库,一切正常。
有人知道我在配置 Elastic Beanstalk
与 RDS
通话时可能遗漏了什么吗?
当 postgre-jdbc.jar 在 your.war#WEB-APP/lib/ 文件夹中时,会发生这种错误。从那里删除它并将其放入 $CATALINA_HOME/lib/ 文件夹中,它将正常工作。
问题出在 DriverManager class 使用的 classloader 中。
原来 Elastic Beanstalk
的默认 Tomcat 8
安装包括 commons-pools
和 dbcp
。 Datanucleus
正在使用 dbcp
实现连接到数据库,但出于某种原因,完整的 jdbc
URI 并未一直沿调用链向下传递。
我确定这是某种 persistence.xml
类型配置问题,但就我的目的而言,解决方案很简单:
<property name="datanucleus.connectionPoolingType" value="None"/>
标题几乎说明了一切。
我正在开发 Java
网络应用程序,托管在 Elastic Beanstalk
使用 Datanucleus 4.0.6
与 postgresql 9.3
数据库通信。数据库位于 Amazon RDS
.
我已经尝试了所有我能想到的设置组合:
- 获取 beantalk 以创建数据库
- 手动创建私有数据库
- 手动创建 public 数据库
- 正在将 public/private 数据库分配给所有可用的
VPCs
- 使用 postgres 9.4 而不是 9.3
无论我做什么,在尝试开始与数据库通信时都会收到以下错误消息。
No suitable driver found for jdbc:postgresql://myvalidurl.com:5432/ebdb
如果我使 myvalidurl
绝对无效,我会得到同样的错误,所以我无法判断我是否根本无法 "see" 数据库,或者端口是否已关闭,或者它是否以某种方式关闭'说出预期的 postgres 类型。
最后,我可以 运行 使用本地数据库,一切正常。
有人知道我在配置 Elastic Beanstalk
与 RDS
通话时可能遗漏了什么吗?
当 postgre-jdbc.jar 在 your.war#WEB-APP/lib/ 文件夹中时,会发生这种错误。从那里删除它并将其放入 $CATALINA_HOME/lib/ 文件夹中,它将正常工作。
问题出在 DriverManager class 使用的 classloader 中。
原来 Elastic Beanstalk
的默认 Tomcat 8
安装包括 commons-pools
和 dbcp
。 Datanucleus
正在使用 dbcp
实现连接到数据库,但出于某种原因,完整的 jdbc
URI 并未一直沿调用链向下传递。
我确定这是某种 persistence.xml
类型配置问题,但就我的目的而言,解决方案很简单:
<property name="datanucleus.connectionPoolingType" value="None"/>