Я некоторое время пробовал SCDF с намерением использовать Oracle База данных в качестве источника данных. Из-за проблем с лицензированием необходимо добавить драйвер Oracle в classpath сервера SCDF, или мы должны сделать пользовательскую сборку сервера SCDF с Oracle зависимостью от драйвера (которая у меня есть). Когда я загружаю пользовательский проект сборки dataflow-server-22x (только этот проект) из github и пытаюсь выполнить, у меня возникает проблема с отсутствующим артефактом в 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. Я что-то здесь упускаю?
Также я собираюсь создать банку, содержащую набор пакетных заданий, которые можно развернуть в SCDF и организовать из SCDF. Но я не использую Docker или Kubernetes / CloudFoun dry здесь.
Примечание: я уже задавал один вопрос, чтобы получить разъяснения по этой проблеме, которые привели меня к этой проблеме. Там они сказали, что я должен использовать пользовательскую сборку, но не могу точно сказать, как или как решить проблемы, возникающие из пользовательской сборки. Поэтому я разместил этот вопрос. SCDF + Oracle
Заранее спасибо.
Обновление 1:
Эта проблема была решена после предложения Ilayaperumals. Однако я застрял с другой проблемой.
org.springframework.context.ApplicationContextException: Failed to start bean 'taskLifecycleListener'; nested exception is java.lang.IllegalArgumentException: Invalid TaskExecution, ID 3 not found
Но я вижу Id = 3 в таблице task_execution после того, как я выполню задачу из SCDF. Пользовательский проект SCDF имеет те же значения свойств конфигурации базы данных, что и свойства моего пакетного задания Spring. Несколько вещей, на которые следует обратить внимание:
- Spring-boot-starter-parent: 2.2.5.RELEASE,
- Spring-cloud-dataflow: 2.2.0.RELEASE
- Я загружаю все свои пакетные задания из основного класса Boot, используя экземпляр класса пакетных заданий, и только основной класс (который запускает все задания) содержит аннотацию @EnableTask. Ниже приведена структура моего класса.
@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
}
}
- Ниже приведены свойства, которые я использую как в пользовательском анализаторе SCDF, так и в проекте Spring Batch.
**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 в качестве аргументов при запуске сервера и несколько других опций, таких как добавление @Enabletask ко всем классам конфигурации задания, но ни один из них, похоже, не работает.
Что мне здесь не хватает?