重新部署后,Tomcat webapp无法使用MySQL驱动程序
我使用commons-dbcp在一个小的Spring webapp中为MySQL数据库建立连接池,它使用Sun 1.6 JDK作为WAR文件部署到本地Tomcat 6.0.28容器(使用Ubuntu软件包管理器安装)。部署是使用tomcat-maven-plugin-1.1从Maven完成的,目标是
tomcat:redeploy
。 MySQL Connector / J jar位于webapp的WEB-INF/lib
目录中。
在Tomcat启动后第一次加载webapp,一切正常。但是,当我重新部署webapp时,由于Tomcat取消部署webapp,它会抱怨JDBC驱动程序未注册。
code> SEVERE:Web应用程序[/ taskrun]注册了JBDC驱动程序[com.mysql.jdbc.Driver],但在Web应用程序停止时无法取消注册。为防止内存泄漏,JDBC驱动程序已被强制取消注册。
2011年3月11日上午11:29:46 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
然后,当Tomcat重新启动webapp时,它无法连接到数据库,抱怨没有合适的驱动程序:
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.jdbc2.optional.MysqlDataSource' for connect URL 'jdbc:mysql://127.0.0.1:3306/testdb?autoReconnect=true'
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 14 more
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:279)
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
... 18 more
如果我在重新部署后手动重启Tomcat,一切正常。
我知道MySQL驱动程序在加载类时会使用DriverManager注册自己,但是当重新部署webapp时,似乎不会重新加载com.mysql.jdbc.Driver
类。 Tomcat的WebappClassLoader是否应该在重新加载webapp时从WEB-INF/lib
目录重新加载类,还是在部署之间将它们保存在内存中?或者我必须在部署后自己重新注册MySQL驱动程序?
此外,我已经看到很多帖子建议将驱动程序jar移动到Tomcat的commons/lib
目录,但我希望尽可能避免我的WAR文件外部的依赖项。
提前感谢您的任何帮助。
没有找到相关结果
已邀请:
1 个回复
盟犯涩沟都