我正在尝试使用 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 而不会出现驱动程序错误时可能会缺少什么吗?
21.9.0.0
19.3.0.0