java - 无法从 Elastic Beanstalk 上的 Java 应用程序连接到 MySQL Amazon RDS,java.sql.SQLException : No suitable driver

标签 java mysql driver amazon-elastic-beanstalk rds

我有一个与 mysql 数据库对话的 Java 网络应用程序 (REST API)。

它在我的本地主机和运行 Tomcat 和 MySql 的独立 EC2 服务器上完美运行,但是当我部署在 AWS Elastic Beanstalk 上时它无法连接到 Amazon Relational Data Service .

我收到以下错误消息:

22:09:18,757 DEBUG BasicResourcePool:1831 - An exception occurred while acquiring a poolable resource. Will retry.
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:289)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:224)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPerTaskAsynchronousRunner$TaskThread.run(ThreadPerTaskAsynchronousRunner.java:255)

我正在运行 Mysql 5.5,它是一个 Java 7 应用程序。

为了运行 Java 7 WAR 文件,我在 .ebextensions 中有一个配置文件,如下所示: http://qslack.com/2012/12/using-java-1-7-on-amazon-aws-elastic-beanstalk/

我已经查看了http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.rds.html , 而我唯一没有做的是

To connect to Tomcat RDS environments you must load the driver explicitly using Class.forName() prior to the call to DriverManager.getConnection() in the Java code.

因为我正在使用 Spring (3.2.0) 和 Hibernate (4.1.9) 建立数据库连接。话虽如此,我确实尝试将其添加到我的一种方法中作为测试,但它没有用。

我已经从 elastic beanstalk ec2 实例上的命令行以及我的个人计算机成功连接,所以这不是权限/访问问题。

我的 WebContent/WEB-INF/lib 目录中有 mysql connector/j jar 文件 (mysql-connector-java-5.1.25-bin.jar)。我也尝试手动将此 jar 文件复制到 /usr/share/tomcat7/lib 但这没有帮助。

这似乎是几个人都遇到过的问题,但所提出的解决方案似乎都不起作用。例如:

https://forums.aws.amazon.com/thread.jspa?messageID=413533 https://forums.aws.amazon.com/thread.jspa?messageID=285923&tstart=0#285923

最佳答案

问题是 Elastic Beanstalk 在我传入的 JDBC_CONNECTION_STRING 环境变量周围添加了引号。

此线程中描述了问题和解决方案: https://forums.aws.amazon.com/thread.jspa?threadID=115043

(将以下内容添加到我的 .ebextensions 配置中解决了这个问题):

commands: 
     patch_tomcat:
         command: sed -i.bak s#\"/usr/sbin/tomcat7\"#\"/usr/sbin/tomcat7-elasticbeanstalk\"#g /etc/init.d/tomcat7

关于java - 无法从 Elastic Beanstalk 上的 Java 应用程序连接到 MySQL Amazon RDS,java.sql.SQLException : No suitable driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479212/

相关文章:

windows-7 - 是否可以在不重新启动的情况下卸载内核驱动程序?

java - 如何将对象转换为 JsType?

Java - 解析 ä ö ü

javascript - 如何使用 NodeJS 将 MySQL 中的数据显示为 HTML 页面

Android USB 有时无法识别

c++ - 这是ntoskrnl.exe中tolower实现的大bug吗?

java - 如何像java一样格式化日期时间?

java - 为什么 JaCoCo 看到了我的 JUnit 但忽略了我的 Spock 测试?

mysql - 需要在删除和插入模式下将最近5个月的数据存储在表中

mysql - 搜索最近添加的关键字