簡體   English   中英

Spring數據流服務器如何添加Oracle驅動依賴?

[英]How to add Oracle Driver dependency to Spring Data Flow Server?

我目前正在嘗試使用 Spring 批次的 Spring 數據流服務器。 我的 application.properties 中有兩個數據源。 Spring 批處理應用程序運行良好,它可以將數據讀取和寫入數據庫。

但是當我嘗試在 Spring 雲數據流服務器中部署 Jar 文件時,SCDF 不會從 application.properties 文件加載屬性並加載默認的 h2 配置。 我還嘗試在啟動 SCDF 時將配置作為 arguments 傳遞,但我得到 Oracle Driver not found in class path。 但請記住批處理作業工作並插入數據。 我的問題是在 SCDF 啟動期間將這些數據庫配置作為 arguments 傳遞時,我應該將 Oracle Jdbc 驅動程序 jar (ojdbc7-1.0.0) 保留在哪里? 或者如何添加依賴項以便 SCDF 可以看到數據庫配置。 下面是我如何通過數據庫 arguments。

java -jar spring-cloud-dataflow-server-2.4.2.BUILD-20200310.115040-7.jar
 --spring.datasource.url=jdbc:oracle:thin:@mydb
 --spring.datasource.username=username 
 --spring.datasource.password=password 
 --spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

而我得到的例外,

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthContributorAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: oracle.jdbc.OracleDriver
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:617)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:605)
        at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1242)
        at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration.healthContributorRegistry(HealthEndpointConfiguration.java:78)

我在另一個 SO 問題中發現可以將 oracle 驅動程序依賴項添加到 SCDF。 但是他沒有明確提到如何,我沒有足夠的積分來添加評論。 因此在這里張貼。 我所指的答案的鏈接是,

spring-data-flow 任務示例

I have fixed the same issue by getting SCDF source code & added oracle dependency jars and ran the command same as above. It worked. You need to make sure that you added drivers for DB in SCDF before running the above command. SCDF comes with DB related jars but if you are using oracle or some third party you need to add it manually. 

任何幫助表示贊賞。

注意:在我的應用程序中,我擴展了 DefaultTaskConfigurer 並返回了 Oracle 數據源,其中包含 Task_Execution 和相關表。 但這似乎無濟於事。

根據Spring 雲數據流參考(第 24.1.1 節),您應該在應用程序的 pom 文件的依賴項部分添加所需的數據庫驅動程序(在您的情況下為 Oracle)的dependencies項。

<dependencies>
...
    <dependency>
      <groupId>com.oracle.ojdbc</groupId>
      <artifactId>ojdbc8</artifactId>
      <version>19.3.0.0</version>
    </dependency>
...
</dependencies>

然后,您必須按照此處所述構建應用程序: Building Spring Cloud Data Flow

現在對我們來說幸運的是 Oracle 的 JDBC 驅動程序可在Maven Central上獲得

還要檢查:

為Spring雲數據流服務器添加自定義JDBC驅動

SCDF 提供關於如何添加 Oracle JDBC 驅動程序的更好文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM