Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource‘ defined in class path resource [spring-mybatis.xml]: Invocation of init method failed; nested exception is java.sql.SQLException: oracle.jdbc.driver.OracleDriver
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
... 53 more
Caused by: java.sql.SQLException: oracle.jdbc.driver.OracleDriver
at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:500)
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:382)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
... 60 more
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:494)
... 68 more
笔者在做一个MAVEN+SPRING+MYBATIS+ORACLE整合时碰到这个问题,单元测试SERVICE一切正常,但是发布到TOMCAT7时出现这个错误。
从这个错误的现象来看是ORACLE驱动的OJDBC没有一起发布,我原来在POM.XML文件是这么写的
com.oracle
ojdbc6
11
system
${project.basedir}/lib/ojdbc6.jar
其实这个问题非常明显,原因就是通过这样SYSTEMPATH方式引用造成的,其实MAVEN可以引用本地JAR包,但需要自己去单独发布,为了省事,你也可以将JAR包导入到本地库中,方法是在MAVEN的BIN目录下用命令行执行如下语句
mvn install:install-file -Dfile=E:\J2EE\jar\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11 -Dpackaging=jar
具体的参数内容根据自己的情况修改,执行完一般就好了。