2012-08-30 11 views
12

मैंने स्टैक ओवरफ्लो पर कई समान प्रश्न देखे हैं, लेकिन उन्होंने मेरी समस्या का समाधान नहीं किया। This one विशेष रूप से उपयोगी है, क्योंकि यह आधिकारिक tomcat documentation और विशेष रूप से this section पर इंगित करता है।tomcat7: जेडीबीसी ड्राइवर वर्ग लोड नहीं कर सका [com.mysql.jdbc.Driver]

समाधान प्रदान की वहाँ कम में है,: बिल्ला की जरूरत JDBC डेटाबेस ड्राइवरों $CATALINA_HOME/lib में कॉपी किया है, क्योंकि यह उन्हें WEB-INF/lib/ के तहत नहीं मिलेगा। ठीक है, लेकिन यह अभी भी मेरे लिए काम नहीं करता है, और मैं पागल हो रहा हूँ।

चलिए देखते हैं कि आप कोई और विचार प्रदान कर सकते हैं या नहीं।

पर्यावरण विंडोज एक्सपी, टॉमकैट 7, एक्लिप्स इंडिगो, जावा 6 और स्प्रिंग 3 है।

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:\> 

आप शायद जानते हैं कि ग्रहण के बिलाव एकीकरण अपनी तैनाती (CATALINA_BASE) के लिए एक डब्ल्यूटीपी विशेष निर्देशिका बनाता में कॉपी किया गया है, इसलिए मैं भी वहाँ mysql-कनेक्टर की नकल की (मैं असफल है CATALINA_HOME में mysql-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:\> 

जहां तक ​​मेरा बिलाव के सीए को समझने 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> 

लेकिन जब मैं पुनः आरंभ बिल्ला मैं निम्न त्रुटि:

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 बिलाव द्वारा खुला किया जा रहा है:

"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

खुद के लिए downvote आप एक सरल जावा applicatoin के भीतर से loding एक ही चालक की कोशिश की है –

+0

यह विचार समस्या को खोजने के लिए महत्वपूर्ण था नीचे उत्तर देखें –

उत्तर

9

हल अपने आवेदन में फ़ाइलें डाल करने की कोशिश करेंगे!

आर्टर्स लाइसेंसिस का सुझाव कुंजी था। किसी भी तरह mysql ड्राइवर गलत तरीके से डाउनलोड किया गया था। यह एक .jar फ़ाइल लग रहा था, लेकिन लोड करने में विफल रहा। बिलाव अपवाद की सिर्फ पहली स्तर दिखा गया था:

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 फ़ाइल खोलने से पता चलता है कि यह खुला हो सकता है ... लेकिन कुछ त्रुटियों के साथ।

ड्राइवर को फिर से डाउनलोड करने से समस्या हल हो गई।

:-(

+0

खुशी है कि यह आपकी मदद करता है। अपना अनुभव साझा करने के लिए +1 :) –

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.

यह इस बात पर निर्भर करता है कि आप ड्राइवर को कैसे लोड करते हैं।

यदि आप ड्राइवर के भीतर ड्राइवर को कॉन्फ़िगर करते हैं और इसे एप्लिकेशन को प्रदान करते हैं तो यह कथन सही है।

लेकिन आप सीधे अपने आवेदन के भीतर ड्राइवर लोड करते हैं। फिर दोनों तरीकों, $CATALINA_HOME/lib/ (टोमकैट में) के साथ-साथ WEB-INF/lib/ (आवेदन में) काम करना चाहिए।

लेकिन वसंत उस वर्ग को लोड करने Class.forName(driverClassNameToUse, true, ClassUtils.getDefaultClassLoader()) एक विशेष तरीके से इस्तेमाल करते हैं और मैं न पता है कि यह कैसे $CATALINA_HOME/lib/ में फ़ाइलों के लिए व्यवहार करते हैं तो मैं WEB-INF/lib/ फ़ोल्डर

+0

राल्फ:।। धन्यवाद, लेकिन मैं ऐसा नहीं लगता कि यह लागू होता है। मेवेन पहले से ही MySQL-connector को वेब-आईएनएफ/lib/किसी भी बदलाव के बिना रखता है। इसके अलावा, ओरेकल के साथ परीक्षण पर मेरा संपादन देखें ... –

+0

यह काम करना चाहिए, तो समस्या कुछ और होने की संभावना है। – Ralph

+0

I सहमत हैं। ऐसा लगता है कि मैं mysql के लिए विशेष रूप से कुछ गलत कर रहा हूं। –