我正在尝试将maven构建的Java Web应用程序部署到Elastic Beanstalk,后者正在运行Amazon Linux Tomcat 7版本的环境。该应用程序在localhost上工作正常,即使使用外部mysql数据库(XEROUND)。
我原来的context.xml有如下资源:
<Resource auth="Container"
driverClassName="com.mysql.jdbc.Driver"
logAbandoned="true"
maxActive="100"
maxIdle="30"
maxWait="10000"
name="jdbc/xxxx-01292013"
password="xxxx"
removeAbandoned="true"
removeAbandonedTimeout="60"
type="javax.sql.DataSource"
url="jdbc:mysql://instancexxxx.db.xeround.com:xxxx/xxxx-01292013? autoReconnect=true"
username="xxxx-general"/>
然而,当我运行此应用程序时,我收到以下错误:
java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
我尝试将以下行添加到我的context.xml资源中:
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
但这也没有奏效。然后我尝试添加这一行:
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
但这给了我新的例外:
javax.naming.NamingException: com.mysql.jdbc.Driver
我在这里碰到一堵墙,有人知道我能做些什么才能让这件东西运转起来吗?
答案 0 :(得分:5)
好的,经过一些实验并玩弄配置之后,我让我的应用程序工作,将以下内容放在我的context.xml资源标记中:
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
以及我的pom.xml文件中的以下内容:
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
给出了这个答案
然而,我试图开始工作的更好的解决方案是在我的应用程序中放置一个.ebextensions文件,为它编写一个.config文件,并让它以这种方式工作。我认为这种方法将更适合长期,因为它将允许我解决我的开发环境和弹性beanstalk的Tomcat 7之间的任何进一步配置不匹配问题。此解决方案也在AWS论坛{{3 }和here。