提问者:小点点

如何使用Oracle驱动程序依赖性定制构建Spring云数据流服务器?


我已经尝试了一段时间的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或Kubernetes/CloudFoundry。

注意:我已经问了一个问题来澄清这个问题,这导致了这个问题。在那里,他们说我应该使用自定义构建,但无法确切地说出如何或如何解决自定义构建中出现的问题。因此,我发布了这个问题。SCDF 甲骨文

提前感谢。

更新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批处理作业属性相同的数据库配置属性值。这里需要注意的几件事是,

  • Spring启动启动器父级:2.2.5.发布,
  • 春云数据流:2.2.0.发布
  • 我使用批处理作业类的实例从 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自定义serer和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

我尝试在启动服务器时将数据库配置作为 args 提供,还有一些其他选项,例如向所有作业配置类添加@Enabletask,但它们似乎都不起作用。

我错过了什么?


共0个答案