java - Maven-Camel-Spring-Oracle : Error creating bean - java. lang.IllegalStateException : Could not load JDBC driver class [oracle. jdbc.driver.OracleDriver]

标签 java spring maven apache-camel ojdbc

我从昨天开始就收到这个错误,尽管我已经尝试了所有想到的方法或者我在互联网上搜索过,但我还是无法解决它。 上下文:java 6、Spring 3.1.4、camel 2.11.1、Oracle 驱动程序 10.2.0.2。

我在 camel 上下文文件中有这个 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] Adding project dependency artifact: ojdbc14 to classpath
  • 我可以在 jar 中看到类 oracle.jdbc.driver.OracleDriver

然而,我每次都会遇到这些错误:

  • 当使用 class="org.apache.commons.dbcp.BasicDataSource"作为数据源类时: 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 是正确的,所以用户和密码,我试图指向我有权访问的每个环境数据库(本地、开发、质量检查、暂存)。没有任何效果。

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

最佳答案

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

<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 容器提供了这些类。此范围仅在编译和测试类路径上可用,不可传递。

关于java - Maven-Camel-Spring-Oracle : Error creating bean - java. lang.IllegalStateException : Could not load JDBC driver class [oracle. jdbc.driver.OracleDriver],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290214/

相关文章:

java - Jax-ws : Java SOAP exception :MustUnderstand headers:[{http://www. w3.org/2005/08/addressing} Action

java - 初始化后 JPanel 的 setSize

java - AWS lambda java 响应不支持嵌套对象?

java - 使用 JOGL(Java OpenGL)

java - Maven - 生成每个依赖源的存档

java - Spring Boot定义多个交换

java - InternalViewResolver 在 Spring 中不工作

java - 带有类路径的 Spring Boot 可执行 Jar

eclipse - Maven 配置后无法解析导入

java - 使用 commons-email 配置模拟电子邮件