使用自己的数据库配置Spring Cloud Data Flow Task

时间:2019-03-07 15:25:22

标签: java spring-boot spring-data-jpa spring-cloud-dataflow

我有一个任务应用程序,它带有自己的数据库,希望在Spring Cloud Data Flow中运行。

我的问题是SCDF用SCDF的数据源配置覆盖了任务中的数据源配置。 (两个数据库都是Oracle DB。)

我的任务应该写入另一个数据库(但我也想知道它在SCDF数据库中的状态)。

如何配置我的任务以连接到其自己的数据库以及SCDF的数据库?

2 个答案:

答案 0 :(得分:0)

我找到了解决方法。

我以此为例在配置类中定义了两个数据源(一个用于JPA,一个用于SCDF):https://www.baeldung.com/spring-data-jpa-multiple-databases

但是这还不够,因为默认情况下,Data Flow Server仅接受一个数据源。为了克服这个问题,需要扩展DefaultTaskConfigurer并在构造函数中设置Data Flow Server的数据源。

@Component
public class GeneratorTaskConfigurer extends DefaultTaskConfigurer {

    public GeneratorTaskConfigurer(@Qualifier("dataflowDataSource") DataSource dataSource) {
        super(dataSource);
    }
}

答案 1 :(得分:0)

您可以使用这样的一个带有SCDF数据源代码的配置类

@Configuration
@Profile("cloud")
public class MySqlConfiguration {

@Bean
public Cloud cloud() {
    return new CloudFactory().getCloud();
}

@Bean
@Primary
public DataSource dataSource() {
    return cloud().getSingletonServiceConnector(DataSource.class, null);
}

@Bean
@Primary
public PlatformTransactionManager getTransactionManager() {
    return new DataSourceTransactionManager(dataSource());
}

@Bean
public JobRepository jobRepositoryFactoryBean() throws Exception{
    JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
    factory.setDataSource(dataSource());
    factory.setTransactionManager(getTransactionManager());
    factory.afterPropertiesSet();
    return factory.getObject();
}

@Bean
@Primary
public DefaultTaskConfigurer defaultTaskConfigurer() {
    return new DefaultTaskConfigurer(dataSource());
}
}

然后将您要写入的数据库的其他数据源配置放在单独的类中。 确保将SCDF标记为一个@Primary,否则会出现多个数据源错误。

希望这会有所帮助。