[SPRING] tomcat7 : JDBC 드라이버 클래스를로드 할 수 없습니다 [com.mysql.jdbc.Driver]
SPRINGtomcat7 : JDBC 드라이버 클래스를로드 할 수 없습니다 [com.mysql.jdbc.Driver]
stackoverflow에 대한 몇 가지 유사한 질문을 본 적이 있지만 그들은 내 문제를 해결하지 못했습니다. 이것은 공식적인 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:\>
이클립스의 Tomcat 통합은 배포 용 WTP 전용 디렉토리 (CATALINA_BASE)를 생성하므로 mysql 커넥터도 복사했다. (CATALINA_HOME, CATALINA_BASE 및 mysql-connector 모두에서 mysql-conector.jar을 사용하여 성공적으로 시도했다. 그들):
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 파일을 이해하는 한, 둘 다 classpath에 추가되었으므로 어떤 차이도 기대하지는 않았다.
스프링 데이터 소스 정의는 매우 간단합니다.
<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 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 : 오라클을 사용해 보았는데 작동했습니다!
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.해결!
해결!
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 :-(
-
==============================
2.드라이버를로드하는 방법에 따라 다릅니다.
드라이버를로드하는 방법에 따라 다릅니다.
Tomcat 내에서 드라이버를 구성하고 응용 프로그램에 제공하면이 문이 올 바릅니다.
그러나 응용 프로그램 내에서 직접 드라이버를로드합니다. 그렇다면 $ CATALINA_HOME / lib / (tomcat에서)뿐만 아니라 WEB-INF / lib / (응용 프로그램에서)와 같은 두 가지 방법 모두 작동해야합니다.
그러나 Spring 클래스를로드하는 특별한 방법을 사용하여 Class.forName (driverClassNameToUse, true, ClassUtils.getDefaultClassLoader ()) 및 $ CATALINA_HOME / lib /에있는 파일에 대해 어떻게 작동하는지 알지 못하므로 응용 프로그램에 파일을 저장하려고합니다. WEB-INF / lib / 폴더
from https://stackoverflow.com/questions/12191900/tomcat7-could-not-load-jdbc-driver-class-com-mysql-jdbc-driver by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 빈에 int 배열을 주입하는 법 (0) | 2019.04.04 |
---|---|
[SPRING] Java 9 용 Spring 5가 필요합니까? (0) | 2019.04.04 |
[SPRING] mvn spring-boot : vs java -jar 실행 (0) | 2019.04.04 |
[SPRING] 스프링 부트 잭슨에서 기본 표준 시간대를 적용하는 방법 날짜 직렬화 (0) | 2019.04.04 |
[SPRING] 메이븐 봄 - 요소 '콩'의 선언을 찾을 수 없습니다 (0) | 2019.04.04 |