2012-08-30 128 views
12

我已經在stackoverflow上看到了幾個類似的問題,但它們沒有解決我的問題。 This one是特別有用的,因爲它指向官方tomcat documentation,特別是this sectiontomcat7:無法加載JDBC驅動程序類[com.mysql.jdbc.Driver]

提供的解決方案簡而言之就是:tomcat需要將jdbc數據庫驅動程序複製到$CATALINA_HOME/lib,因爲它不會在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集成創造了其部署(CATALINA_BASE)特定WTP的目錄,所以我複製的MySQL連接器也有(我已經失敗試圖在CATALINA_HOMEmysql-conector.jar,在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的CA talina.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 

還有一個提示:使用Sysinternals的進程資源管理器,我可以看到的是, mysql-connector-java.jar正在由Tomcat公開:

"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 

Tomcat @ Process Explorer

任何進一步的想法?


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?

+1

你從一個簡單的Java applicatoin內試圖裝載儀相同的驅動程序 –

+0

這個想法是要找到問題的關鍵看下面的答案 –

回答

9

解決WEB-INF/lib/文件夾!

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文件表明它可以打開......但有一些錯誤。

再次下載驅動程序確實解決了問題。

Downvote爲自己:-(

+0

很高興爲您提供幫助。 –

3

The solutions provided there is, in short: tomcat needs jdbc database drivers to be copied to $CATALINA_HOME/lib/ , because it will not find them under WEB-INF/lib/ . Ok, but it still does not work for me, and I am becoming mad.

這取決於您如何加載驅動程序。

如果您在您內部配置了tomcat驅動程序並將其提供給應用程序,那麼此語句是正確的。

但你直接在你的應用程序中加載驅動程序。然後,兩種方式,$CATALINA_HOME/lib/(在tomcat中)以及WEB-INF/lib/(在應用程序中)都應該工作。

但以春用一種特殊的方式來加載類Class.forName(driverClassNameToUse, true, ClassUtils.getDefaultClassLoader()),我不知道它是如何表現爲$CATALINA_HOME/lib/文件,所以我想嘗試將文件放在您的應用程序

+0

拉爾夫:。謝謝,但我不要認爲它適用,Maven已經將mysql-connector放在了WEB-INF/lib /中,而且沒有任何改變,另外,請參閱我對Oracle測試的編輯... –

+0

它應該可以工作,那麼問題可能就是其他的東西 – Ralph

+0

I看起來我正在爲mysql做一些特別錯誤的事情 –

相關問題