无法在Elastic Beanstalk中获得JDBC连接

时间:2018-07-22 04:41:20

标签: java spring amazon-web-services jdbc elastic-beanstalk

我想在AWS中部署我的应用程序。
我已经设置好环境了。
在我的应用程序的root-context.xml中,我有设置数据源。

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@mydbinstance.cnn31xputfwg.ap-northeast-2.rds.amazonaws.com:1521:orcl" />
    <property name="username" value="myid" />
    <property name="password" value="mypassword" />
</bean>

此设置在tomcat服务器中可以在本地正常运行。
但是在AWS中,它会抛出此错误消息

nested exception is org.apache.ibatis.exceptions.PersistenceException: 
Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is
java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
The error may exist in file [/var/lib/tomcat8/webapps/ROOT/WEB-INF/classes/mappers/emp/emp-mapper.xml]
The error may involve EmpDAO.List ### The error occurred while executing a query
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is
java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

现在我的问题是:我应该怎么做才能在AWS中使用get jdbc连接?

1 个答案:

答案 0 :(得分:0)

就像您在AWS上运行应用程序时,它的Employee.objects.all().values('eng_name','rank') 中缺少Oracle JDBC驱动程序。因此,答案是将驱动程序添加到类路径中。

我预见到下一个问题:“如何执行此操作?”,最简单的方法是手动将驱动程序复制到您的类路径中。

如果您不喜欢手工工作,则可以使用Spring Initializr生成Spring应用程序模板。其构建脚本具有CLASSPATH插件,可完成两件重要的事情:

  • 仅构建一个包含Tomcat的org.springframework.boot文件,因此可以仅通过jar启动该应用程序(避免部署到tomcat)
  • 包括从构建脚本java -jar my-app.jar部分到此dependencies文件的所有依赖关系(包括Oracle JDBC驱动程序)