Как добавить Oracle зависимость драйвера для Spring Data Flow Server? - PullRequest
0 голосов
/ 14 апреля 2020

Я сейчас пробую Spring Data Flow Server с пакетами Spring. У меня есть два источника данных в моем application.properties. И приложение Spring Batch прекрасно работает и читает и записывает данные в базу данных.

Но когда я попытался развернуть файл Jar на сервере Spring Cloud Data Flow, SCDF не загружает свойства из файла application.properties и загружает конфигурацию h2 по умолчанию. Я также попытался передать конфигурацию в качестве аргументов при запуске SCDF, но я получил Oracle Драйвер не найден в пути к классам. Но помните, что пакетные задания работают и вставляют данные. Мой вопрос здесь заключается в том, где я должен хранить jar драйвера Oracle Jdb c (ojdbc7-1.0.0) при передаче этой конфигурации базы данных в качестве аргументов при запуске SCDF? Или как добавить зависимость, чтобы SCDF видел конфигурацию базы данных. Ниже показано, как я передал аргументы базы данных.

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 я обнаружил, что в SCDF может быть добавлена ​​зависимость драйвера oracle. Но он не упомянул четко, как, и мне не хватает очков, чтобы добавить комментарий. Отсюда и пост здесь. И ссылка на ответ, на который я ссылаюсь, такова:

пример задачи с потоком данных

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 и связанные таблицы. Но это, похоже, ничего не делает.

1 Ответ

2 голосов
/ 14 апреля 2020

Согласно справке Spring Cloud Data Flow (раздел 24.1.1), вы должны добавить зависимость для требуемого драйвера базы данных (Oracle в вашем случае) в разделе dependencies вашего приложения. POM файл.

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

Затем вы должны построить приложение, как описано здесь: Создание потока данных Spring Cloud .

К счастью для нас сегодня * JDB C 1025 * драйверы доступны на Maven Central

Проверьте также:

Добавить пользовательский драйвер JDB C к серверу потоков данных Spring Cloud

SCDF Предоставить лучшие документы о том, как добавить Oracle JDB C Драйвер

...