我正在将我的应用程序移动到亚马逊网络服务ElasticBeanStalk,在花费了无数个小时试图让我的数据库连接正常工作后,我一再失败。
第一次尝试,
我目前有一个现有的RDS数据库在使用中,我想继续使用。我尝试使用一个普通的旧jdbc连接来连接它,如下所示。
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://masdfwe.czwweehqejmbr.us-east-1.rds.amazonaws.com:3306/project</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">xxxxx</property> 但在日志中发现以下异常。
原因:在java.sql.DriverManager.getConnection(DriverManager.java:596)在java.sql.DriverManager.getConnection(DriverManager.java:187)在org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:192)在org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278)找不到适用于java.sql.SQLException的驱动程序org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) ...还有125个
mysql驱动程序是在lib目录中定义的,所以我不确定为什么会看到这个异常。
是否需要创建JNDI连接?如果是这样,我该如何在ElasticBeanStalk上修改tomcat7中的配置文件?我是应该ssh到ec2实例中,还是应该这样做到ElasticBeanStalk实例中?
我会在我的hibernate.cfg.xml文件中使用类似这样的内容吗?
<property name="hibernate.connection.datasource">java:comp/env/jdbc/project</property>web.xml
<resource-ref>
<description>MyDatabase Description</description>
<res-ref-name>jdbc/project</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>我只是不确定我应该在哪里或配置什么。任何帮助都将不胜感激,我很困惑。
提前谢谢。
发布于 2014-01-24 17:06:21
您不需要过多地使用JNDI就可以使RDS连接正常工作。从你的描述中,我还有点困惑于什么对你不起作用。我已经毫无问题地建立了JDBC/RDS连接,尽管我已经使用Spring访问数据库,因此细节由Spring的数据源处理。
这只是一个想法:你确实有一个
Class.forName ("com.mysql.jdbc.Driver").newInstance ();在代码中加载JDBC驱动程序?
祝好运!
发布于 2014-01-25 03:31:36
你的假设是正确的。使用Hibernate,您应该能够按原样使用您的配置。无需按名称实例化驱动程序,它适用于没有Hibernate的Java代码。
您的配置设置看起来很正确。
会不会是带有MySQL连接器的罐子不知何故被损坏了?堆栈跟踪中还有其他内容吗?
发布于 2014-01-30 07:14:09
我在RDS和MySQL上也遇到过类似的问题。我尝试复制驱动程序的jar文件并操纵类路径,但似乎没有必要这样做,也没有帮助。最后,我更改了初始化DataSource的代码,以传递连接字符串,而不是单独传递每个属性(例如,ds.setUser( xxx ))。这解决了我的问题。
因此,最后,我的属性文件包含以下属性:
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc\:mysql\://xyz.rds.amazonaws.com:3306/schema?user=username&password=mypassword和我的数据源配置:
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass( jdbcDriverClassName );
ds.setJdbcUrl( jdbcUrl );
// other ds configuration parameters follow通过此更改,我能够克服“驱动程序”异常,并按预期连接到RDS数据库。
https://stackoverflow.com/questions/21327234
复制相似问题