私はスタックオーバーフローに関していくつかの同様の質問を見ましたが、それらは私の問題を解決しませんでした。 これ は、公式の Tomcatのドキュメント および特別な このセクション を示しているため、特に便利です。
ここで提供されるソリューションは、簡単に言うと、Tomcatは$CATALINA_HOME/lib
でそれらを見つけられないため、jdbcデータベースドライバーをWEB-INF/lib/
にコピーする必要があることです。わかりましたが、それでも私にはうまくいきません、そして私は怒っています。
さらにアイデアを提供できるかどうか見てみましょう。
環境はWindows XP、Tomcat7、Eclipse Indigo、Java6およびSpring3です。
mysql-connector
が$CATALINA_HOME/lib
にコピーされました
C:\>dir "c:\Program Files\Apache-Tomcat-7.0.12\lib"\mysql*
[...]
/2012 13:39 877.094 mysql-connector-Java-5.1.21.jar
[...]
C:\>
おそらく、EclipseのTomcat統合により、デプロイメント用のWTP固有のディレクトリ(CATALINA_BASE
)が作成されることを知っているので、そこにもmysql-connectorをコピーしました(mysql-conector.jar
、CATALINA_HOME
、およびその両方でCATALINA_BASE
を試してみましたが)。
C:\>dir c:\Share\genesis\wsEclipse-Indigo\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\lib
[...]
29/08/2012 13:39 877.094 mysql-connector-Java-5.1.21.jar
[...]
C:\>
Tomcatのcatalina.propertiesファイルを理解している限り、これらは両方ともクラスパスに追加されているので、違いは予期していませんでしたが、念のため試してみました。
私の春のデータソース定義は非常に簡単です:
<bean id="securityDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/venus" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
しかし、Tomcatを再起動すると、次のエラーが発生します。
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityDataSource' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is Java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.Java:1396)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:464)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:384)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:111)
at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4701)
at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5204)
at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5199)
at Java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at Java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is Java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.Java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.Java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.Java:1393)
... 21 more
30-ago-2012 8:38:11 org.Apache.catalina.core.StandardContext listenerStart
Grave: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityDataSource' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is Java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.Java:1396)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:464)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:384)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:111)
at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4701)
at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5204)
at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5199)
at Java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at Java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is Java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.Java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.Java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.Java:1393)
... 21 more
もう1つのヒント:Sysinternals Process Explorerを使用すると、Tomcatがmysql-connector-Java.jar
を開いていることがわかります。
"C:\Program Files\Java\jre6\bin\javaw.exe" -Dcatalina.base=C:\Share\genesis\wsEclipse-Indigo\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0 "-Dcatalina.home=C:\Program Files\Apache-Tomcat-7.0.12" -Dwtp.deploy=C:\Share\genesis\wsEclipse-Indigo\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\wtpwebapps "-Djava.endorsed.dirs=C:\Program Files\Apache-Tomcat-7.0.12\endorsed" -Dfile.encoding=Cp1252 -classpath "C:\Program Files\Apache-Tomcat-7.0.12\bin\bootstrap.jar;C:\Program Files\Apache-Tomcat-7.0.12\bin\Tomcat-juli.jar" org.Apache.catalina.startup.Bootstrap start
これ以上のアイデアはありますか?
EDIT1:私はOracleを使用しようとしましたが、動作します!
C:\>dir "c:\Program Files\Apache-Tomcat-7.0.12\lib"\oci*
[...]
02/10/2006 22:36 1.545.954 ocijdbc10.jar
[...]
C:\>
データソース:
<bean id="securityDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="Oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:Oracle:oci:@BARVDB002D:1545:TFSDB0" />
<property name="username" value="me" />
<property name="password" value="qwerty" />
</bean>
Mysqlの何が問題になっていますか?
解決しました!
Arturs Licisの提案が鍵でした。どういうわけか、mysqlドライバーが誤ってダウンロードされていました。 .jarファイルのようですが、ロードできませんでした。 Tomcatは例外の最初のレベルのみを示していました。
Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
[...]
しかし、Class.forName( "com.mysql.jdbc.Driver")を使用して非常に単純なhelloworldをコーディングすると、代わりに次のエラーが表示されました。
Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
[...]
Caused by: Java.util.Zip.ZipException: invalid LOC header (bad signature)
[...]
ユーレカ! WinRarで.jarファイルを開くと、開くことができることが示されますが、いくつかのエラーがあります。
ドライバーを再度ダウンロードすると、問題は解決しました。
自分への反対投票:-(
ここで提供されるソリューションは、簡単に言うと、Tomcatは_
$CATALINA_HOME/lib/
_でそれらを見つけられないため、jdbcデータベースドライバーを_WEB-INF/lib/
_にコピーする必要があります。わかりましたが、それでも私にはうまくいきません、そして私は怒っています。
これは、ドライバーのロード方法によって異なります。
Tomcat内でドライバーを構成し、それをアプリケーションに提供する場合、このステートメントは正しいです。
ただし、アプリケーション内で直接ドライバーをロードします。次に、両方の方法で、_$CATALINA_HOME/lib/
_(Tomcatの場合)および_WEB-INF/lib/
_(アプリケーションの場合)が機能します。
しかし、Springは特別な方法でそのクラスClass.forName(driverClassNameToUse, true, ClassUtils.getDefaultClassLoader())
をロードしますが、_$CATALINA_HOME/lib/
_内のファイルに対してどのように動作するかわからないので、ファイルをアプリケーション_WEB-INF/lib/
_フォルダーに配置しようとします