我们正在构建一个基于Java Spring的Web应用程序,它通过Hibernate访问Oracle后端。
这是我们的堆栈/工具:
要从本地计算机访问RDS,我们将端口转发localhost:2521到our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521
我们使用tomcat6-maven-plugin运行嵌入式Tomcat。我们用于测试的Maven配置是 clean package tomcat6:run-war-only 。这会将WAR文件部署到http://app.local:8080/our-app-name/,并允许我们通过此链接测试该站点。
使用Hibernate,当我们从本地嵌入式Tomcat实例运行Web应用程序时,我们可以成功连接到RDS实例。
但是 - 这就是它变得愚蠢的地方 - 当我们将WAR文件部署到我们的EC2实例(它是可以访问RDS实例的安全组的一部分)时,应用程序无法再访问数据库。我们收到此错误:
org.hibernate.exception.GenericJDBCException:无法打开连接
这令人难以置信。我们在运行Tomcat的EC2实例上安装了SQLPlus,我们可以连接到RDS实例,因此EC2实例可以访问连接到RDS实例。
我们的本地连接字符串看起来像这样: * JDBC:预言:瘦:USER_NAME /密码@本地:2521 / SID *
我们的EC2(登台)实例连接字符串如下所示: * JDBC:预言:瘦:USER_NAME/password@our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521 / SID *
我可以提供更多详细信息,但我首先想要解决主要问题所以我不会用无用的信息来淹没水域。
我感谢所有反馈。
贝
答案 0 :(得分:1)
我已经解决了这个问题。
事实证明,有一个Oracle时区错误(ORA-01882:未找到时区区域)是罪魁祸首。我们用于EC2 AMI的Ubuntu服务器有一个默认的时区设置,我猜Java或Oracle无法识别。我已经看到了这个错误,但是无知地认为它与数据库连接错误无关。
我们使用 dpkg-reconfigure tzdata 命令将时区设置为正确的时区并重新启动Tomcat。这使我们能够成功连接到Oracle数据库。
贝