Commons-dbcpを使用して、小さなTom Webアプリケーション内のMySQLデータベースの接続プーリングを行います。このファイルは、ローカルTomcat 6.0.28コンテナ(WARファイルとしてUbuntuパッケージマネージャ)をSun 1.6 JDKを使用して実行します。このデプロイは、tomcat:redeploy
のゴールでtomcat-maven-plugin-1.1を使用してMavenから実行されます。 MySQL Connector/J jarはwebappのWEB-INF/lib
ディレクトリにあります。Tomcat webappは再デプロイ後にMySQLドライバを使用できません
初めてTomcatを起動した後にWebアプリケーションが読み込まれると、すべて正常に動作します。しかし、webappを再デプロイすると、Tomcatがwebappのデプロイを解除するときに、JDBCドライバが登録解除されていないという不満があります。
code>SEVERE: The web application [/taskrun] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. Mar 11, 2011 11:29:46 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
TomcatがWebアプリケーションを再起動するときに、それはありません、適切なドライバ不満、データベースへの接続に失敗した:私は手動で再デプロイした後、Tomcatを再起動した場合
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
すべてが正常に動作します。
クラスがロードされたときにMySQLドライバがDriverManagerに登録されていますが、com.mysql.jdbc.Driver
クラスがwebappの再デプロイ時に再ロードされていないようです。 TomcatのWebappClassLoaderは、Webアプリケーションのリロード時にWEB-INF/lib
ディレクトリからクラスをリロードすることになっていますか、またはそれらをデプロイ間でメモリに保持していますか?または、展開後にMySQLドライバを自分で再登録する必要がありますか?
また、ドライバjarをTomcatのcommons/lib
ディレクトリに移動することを提案している記事がたくさんありますが、WARファイルの外部にできるだけ依存しないようにしたいと考えています。
ありがとうございました。
ありがとうございました! jdbcドライバをWEB-INF/libの両方に置き、実行時にtomcat/sharedがwebappの競合を引き起こしていました。あなたのアドバイスは結局私の問題を解決しました! – hightechfool