我们正在构建一个基于 Java Spring 的 Web 应用程序,该应用程序通过 Hibernate 访问 Oracle 后端。
这是我们的堆栈/工具:
- 雄猫 6
- Maven 3
- Spring (mvc, web, orm) 3.2.0
- 休眠 4.1.9
- Oracle 11g 第 2 版
- Intellij IDEA。
为了从我们的本地机器访问 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:oracle:thin:USER_NAME/password@localhost:2521/sid*
我们的 EC2(暂存)实例连接字符串如下所示:*jdbc:oracle:thin:USER_NAME/password@our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521/sid*
我可以提供更多细节,但我首先想解决主要问题,所以我不会用无用的信息混淆水域。
我感谢所有反馈。
托尼