为 Spring Cloud Dataflow 设置 jdbc 源应用程序时如何解决 Oracle 驱动程序错误?

问题描述 投票:0回答:1

我正在尝试使用 Spring Cloud Dataflow 建立一个 ETL 管道,其中 Oracle 作为源,自定义应用程序作为处理器/转换器,MySQL 作为接收器。

Oracle 也用作 Spring Cloud Dataflow Server 运行的数据库。为了使其能够与 Oracle 一起使用,我必须对

pom.xml
中的
spring-cloud-dataflow-server
进行以下更改:

diff --git a/spring-cloud-dataflow-server/pom.xml b/spring-cloud-dataflow-server/pom.xml
index da2bc2c72..710ca1287 100644
--- a/spring-cloud-dataflow-server/pom.xml
+++ b/spring-cloud-dataflow-server/pom.xml
@@ -18,7 +18,7 @@
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
                <java.version>1.8</java.version>
-               <oracle-driver-ojdbc8.version>21.9.0.0</oracle-driver-ojdbc8.version>
+               <oracle-driver-ojdbc8.version>19.3.0.0</oracle-driver-ojdbc8.version>
                <maven-javadoc-plugin.version>3.4.1</maven-javadoc-plugin.version>
                <maven-source-plugin.version>3.3.0</maven-source-plugin.version>
                <checkstyle.config.location>../src/checkstyle/checkstyle.xml</checkstyle.config.location>
@@ -171,10 +171,9 @@
                        <scope>test</scope>
                </dependency>
                <dependency>
-                       <groupId>com.oracle.database.jdbc</groupId>
+                       <groupId>com.oracle.ojdbc</groupId>
                        <artifactId>ojdbc8</artifactId>
                        <version>${oracle-driver-ojdbc8.version}</version>
-                       <scope>test</scope>
                </dependency>
                <dependency>
                        <groupId>mysql</groupId>

这可以很好地允许 Spring Cloud Dataflow Web 界面运行并以 Oracle 作为后端。

我在使用 Oracle 时仍然遇到的问题是,我无法让它作为我的流定义的 JDBC 源。 当我深入研究这一点时,有人指出我要在

pom.xml
配置中进行类似的更新Spring Cloud Skipper,如文档中所述

diff --git a/spring-cloud-skipper/spring-cloud-skipper/pom.xml b/spring-cloud-skipper/spring-cloud-skipper/pom.xml index 35c68437c..fb6d3f3f0 100644 --- a/spring-cloud-skipper/spring-cloud-skipper/pom.xml +++ b/spring-cloud-skipper/spring-cloud-skipper/pom.xml @@ -13,6 +13,7 @@ </parent> <properties> <failIfNoTests>true</failIfNoTests> + <oracle-driver-ojdbc8.version>19.3.0.0</oracle-driver-ojdbc8.version> </properties> <dependencies> <dependency> @@ -75,6 +76,16 @@ <artifactId>equalsverifier</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.oracle.jdbc</groupId> + <artifactId>ojdbc8</artifactId> + <version>${oracle-driver-ojdbc8.version}</version> + </dependency> </dependencies> <build> <plugins>
当我部署流时,转换器和 JDBC 接收器 (MySQL) 部署成功,但我在 JDBC 源 (Oracle) 的标准输出中收到此错误:

Caused by: java.lang.IllegalStateException: Cannot load driver class: oracle.jdbc.OracleDriver
我已经在本地下载了Oracle驱动程序并将其导入到本地Maven存储库中并重建了Spring Cloud Skipper,但都没有效果。

这是我的流定义的缩写版本:

my-stream=oracle: jdbc --max-messages-per-poll=1000 --fixed-delay=30s --password=xxxxxxxx --driver-class-name=oracle.jdbc.OracleDriver --username=my_user --url=jdbc:oracle:thin:@my-oracle-db.com:1521/my_service_name --update="UPDATE /* ... */" --query="SELECT /* ... */" | my-transform-app | mysql: jdbc --password="xxxxxxxx" --driver-class-name=org.mariadb.jdbc.Driver --username=my_user --url="jdbc:mysql://my-mysql-db.com:3306/my_database" --table-name=my_table
有人知道我在设置 JDBC 源以使用 Oracle 而不会出现驱动程序错误时可能会缺少什么吗?

oracle spring-cloud-dataflow ojdbc
1个回答
0
投票
上面的 pom.xml 文件中需要注意的一些事项。

  1. 为什么要加载/引用两个版本的 ojdbc8 jar。确保始终使用一种版本的 JDBC jar。


    21.9.0.0
    19.3.0.0

  2. 在maven依赖中,我看到组ID为“com.oracle.jdbc”,但它应该是“com.oracle.database.jdbc”

© www.soinside.com 2019 - 2024. All rights reserved.