[英]How to do a Custom Build of Spring Cloud Data Flow server with Oracle driver dependency?
我一直在嘗試 SCDF 一段時間,打算使用 Oracle 數據庫作為數據源。 由於許可問題,必須將 Oracle 驅動程序添加到 SCDF 服務器的類路徑中,或者我們必須使用 Oracle 驅動程序依賴項(我有)來自定義構建 SCDF 服務器。 當我從 github 下載自定義構建項目dataflow-server-22x (僅此項目)並嘗試執行時,我在 pom.xml 中遇到了一個缺少工件的問題,如下所示。
Missing artifact io.pivotal:pivotal-cloudfoundry-client-reactor:jar:1.1.0.RELEASE
at <xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> of pom.xml
那么我究竟要如何執行這個 SCDF jar 的自定義構建。我在這里遺漏了什么嗎?
此外,我的意圖只是構建一個 jar,其中包含一組可以部署在 SCDF 中並從 SCDF 編排的批處理作業。 但我在這里沒有使用 Docker 或 Kube.netes/CloudFoundry。
注意:我已經問了一個問題來澄清這個問題,這導致了我的這個問題。 他們在那里說我應該使用自定義構建,但無法確切說明如何或如何解決自定義構建引起的問題。 因此我發布了這個問題。 民防部隊+甲骨文
提前致謝。
更新 1:
在 Ilayaperumals 的建議下,上述問題得到了解決。 但是我遇到了另一個問題。
org.springframework.context.ApplicationContextException: Failed to start bean 'taskLifecycleListener'; nested exception is java.lang.IllegalArgumentException: Invalid TaskExecution, ID 3 not found
但是在我從 SCDF 執行任務后,我在 task_execution 表中看到 Id=3。 自定義 SCDF 項目具有與我的 Spring 批處理作業屬性相同的數據庫配置屬性值。 這里需要注意的幾件事是,
@SpringBootApplication
@EnableScheduling
@EnableTask
public class SpringBootMainApplication{
@Autowired
Job1Loader job1Loader;
public static void main(String[] args) {
SpringApplication.run(SpringBootMainApplication.class, args);
}
@Scheduled(cron = "0 */1 * * * ?")
public void executeJob1Loader() throws Exception
{
JobParameters param = new JobParametersBuilder()
.addString("JobID",
String.valueOf(System.currentTimeMillis()))
.toJobParameters();
jobLauncher.run(job1Loader.loadJob1(), param);
}
}
//Job Config
@Configuration
@EnableBatchProcessing
public class Job1Loader {
@Bean
public Job loadJob1()
{
return jobBuilderFactory().get("JOb1Loader")
.incrementer(new RunIdIncrementer())
.flow(step01())
.end()
.build();;//return job
}
我在我的 Spring 工作項目中使用了兩個不同的數據源,都是 oracle 數據源(不同的服務器)。我將其中一個標記為主要數據源,並在我自定義的“DefaultTaskConfigurer”實現中使用了該數據源,如下所示。
@Configuration
public class TaskConfig extends DefaultTaskConfigurer {
@Autowired
DatabaseConfig databaseConfig;
@Override
public DataSource getTaskDataSource() {
return databaseConfig.dataSource();//dataSource() returns the
primary ds
}
}
**Spring batch Job :**
spring.datasource.jdbc-url=jdbc:oracle:thin:@mydb
spring.datasource.username=db_user
spring.datasource.password=db_pwd
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
**SCDF customer Server:**
spring.datasource.url=jdbc:oracle:thin:@mydb
spring.datasource.username=db_user
spring.datasource.password=db_pwd
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
我嘗試在啟動服務器時提供 db 配置作為 args 以及其他一些選項,例如將 @Enabletask 添加到所有作業配置類,但它們似乎都不起作用。
我在這里錯過了什么?
由於您提到您不在 CloudFoundry 上運行它並且特定依賴io.pivotal:pivotal-cloudfoundry-client-reactor:jar
來自spring-cloud-dataflow-platform-cloudfoundry
,您需要從自定義中刪除此依賴項構建配置如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dataflow-server</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-platform-cloudfoundry</artifactId>
</exclusion>
</exclusions>
</dependency>
此外,執行./mvnw dependency:tree
將幫助您確定依賴項來自何處:
\- org.springframework.cloud:spring-cloud-dataflow-platform-cloudfoundry:jar:2.5.0.BUILD-SNAPSHOT:compile
[INFO] | | +- org.springframework.cloud:spring-cloud-deployer-cloudfoundry:jar:2.3.0.BUILD-SNAPSHOT:compile
[INFO] | | | +- org.cloudfoundry:cloudfoundry-client-reactor:jar:4.1.0.RELEASE:compile
[INFO] | | | |
[INFO] | | | +- io.projectreactor.addons:reactor-extra:jar:3.3.2.RELEASE:compile
[INFO] | | | \- io.pivotal:pivotal-cloudfoundry-client-reactor:jar:2.0.0.RELEASE:compile
[INFO] | | | \- io.pivotal:pivotal-cloudfoundry-client:jar:2.0.0.RELEASE:compile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.