数据库
首页 > 数据库> > Maven-Camel-Spring-Oracle:创建bean时出错-java.lang.IllegalStateException:无法加载JDBC驱动程序类[oracle.jdbc.driver

Maven-Camel-Spring-Oracle:创建bean时出错-java.lang.IllegalStateException:无法加载JDBC驱动程序类[oracle.jdbc.driver

作者:互联网

从昨天开始,我就收到了这个错误消息,即使我已经尝试过所有想到的事情,或者发现在Internet上进行搜索,但仍无法解决.
上下文:Java 6,Spring 3.1.4,骆驼2.11.1,Oracle驱动程序10.2.0.2.

我在骆驼上下文文件中有这个bean:

<bean id="myDataSource"  class="**org.springframework.jdbc.datasource.DriverManagerDataSource**">
  <property name="driverClassName" value="**oracle.jdbc.driver.OracleDriver"**/>
  <property name="url" value="jdbc:...."/>
  <property name="username" value="userhere"/>
  <property name="password" value="passwordhere"/>
</bean> 

我也尝试过使用此类的bean:class =“ org.apache.commons.dbcp.BasicDataSource”
还有一个在其他地方使用这个bean的bean.
我在POM中有这个(顺便说一句,我从另一个指向同一数据库的项目中带来了这种依赖关系,所以它是正确的版本):

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc14</artifactId>
  <version>10.2.0.2</version> 
  <scope>provided</scope>
</dependency>

我也有这个,因为我尝试使它起作用的原因有所不同:

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jdbc</artifactId>
  <version>2.11.1</version>
</dependency>   
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>3.1.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>1.4</version>
</dependency>

>已验证连接数据(URL,用户和密码),并且对于我尝试连接的每个环境数据库来说都是正确的.
>我可以在Maven依赖项中看到ojdbc14 jar,在启用调试输出的情况下执行“ maven run”时,我也可以看到它:[DEBUG]将项目依赖项:ojdbc14添加到classpath
>我可以在jar中看到类oracle.jdbc.driver.OracleDriver.

但是,我每次都会遇到这些错误:

>使用class =“ org.apache.commons.dbcp.BasicDataSource”作为dataSource类时:
class =“ org.apache.commons.dbcp.BasicDataSource”

        [29 Nov 2013 13:39:03,257][e) thread #0 - timer://kickoff] DefaultErrorHandler            ERROR Failed delivery for (MessageId: ID-vpar-alcantara-51044-1385743141288-0-1 on ExchangeId: ID-vpar-alcantara-51044-1385743141288-0-2). Exhausted after delivery attempt: 1 caught: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
        org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
            at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
            at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:76)
            at org.apache.camel.component.jdbc.JdbcProducer.process(JdbcProducer.java:63)
            at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)
            at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298)
            at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.BacklogTracerInterceptor.process(BacklogTracerInterceptor.java:84)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391)
            at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273)
            at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:335)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
            at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
            at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
            at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86)
            at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:135)
            at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:63)
            at java.util.TimerThread.mainLoop(Timer.java:555)
            at java.util.TimerThread.run(Timer.java:505)
        Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420)
            ... 46 more
        [29 Nov 2013 13:39:03,265][e) thread #0 - timer://kickoff] TimerConsumer                  WARN  Error processing exchange. Exchange[Message: select vendor_style from supplier_ingest_style where  bluefly_product_color is not null]. Caused by: [org.apache.commons.dbcp.SQLNestedException - Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver']
        org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
            at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
            at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:76)
            at org.apache.camel.component.jdbc.JdbcProducer.process(JdbcProducer.java:63)
            at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)
            at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298)
            at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.BacklogTracerInterceptor.process(BacklogTracerInterceptor.java:84)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391)
            at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273)
            at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:335)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
            at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
            at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
            at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
            at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
            at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
            at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99)
            at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86)
            at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:135)
            at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:63)
            at java.util.TimerThread.mainLoop(Timer.java:555)
            at java.util.TimerThread.run(Timer.java:505)
        Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420)

>使用class =“ org.springframework.jdbc.datasource.DriverManagerDataSource”时

        java.lang.reflect.InvocationTargetException
            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:606)
            at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:459)
            at java.lang.Thread.run(Thread.java:744)
        Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myDataSource' defined in file [C:\GITWorkspace\vendorIngestion\target\classes\META-INF\spring\camel-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 [oracle.jdbc.driver.OracleDriver]
            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:607)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
            at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:186)
            at org.apache.camel.spring.Main.doStart(Main.java:140)
            at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
            at org.apache.camel.main.MainSupport.run(MainSupport.java:148)
            at org.apache.camel.main.MainSupport.run(MainSupport.java:343)
            at org.apache.camel.spring.Main.main(Main.java:73)
            ... 6 more
        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 [oracle.jdbc.driver.OracleDriver]
            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)

尽管我不知道为什么,但是在这两条消息中,它显然都无法加载OracleDriver.第一个表示ClassNotfoundException,第二个表示java.lang.IllegalStateException.

现在,我正在Eclipse中使用maven插件运行,为了以防万一,但为了知道这不是在Maven上运行时的解决方案,我尝试将ojdbc jar添加到eclipse类路径中.但是没有任何效果. oracle驱动程序版本对于我们的Orcale是正确的,URL是正确的,因此用户名和密码都试图指向我可以访问的每个环境db(本地,dev,qa,暂存).没事.

任何人都知道为什么实际上将jar添加到类路径时为什么找不到或加载OracleDriver吗?

解决方法:

您是否正在应用服务器上运行此应用?如果服务器的类路径上没有JDBC驱动程序,请尝试将范围设置为Oracle驱动程序依赖关系的默认值(编译),因为它是默认值,您可以省略scope标签:

<dependency>
 <groupId>com.oracle</groupId>
 <artifactId>ojdbc14</artifactId>
 <version>10.2.0.2</version> 
</dependency>

两个范围之间的区别:

>编译
这是默认范围,如果未指定则使用.编译依赖项在项目的所有类路径中均可用.此外,这些依赖项会传播到相关项目.
>提供
这很像编译,但是表明您希望JDK或容器在运行时提供依赖项.例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.该作用域仅在编译和测试类路径上可用,并且不可传递.

标签:maven,apache-camel,ojdbc,spring,java
来源: https://codeday.me/bug/20191030/1965586.html