【问题标题】:Configuring a Spring Cloud Data Flow Task with its own Database使用自己的数据库配置 Spring Cloud 数据流任务
【发布时间】:2019-07-29 13:08:09
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我找到了解决办法。

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

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

    @Component
    public class GeneratorTaskConfigurer extends DefaultTaskConfigurer {
    
        public GeneratorTaskConfigurer(@Qualifier("dataflowDataSource") DataSource dataSource) {
            super(dataSource);
        }
    }
    

    【讨论】:

      【解决方案2】:

      你可以有一个这样的 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,否则会出现多个数据源错误。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-05-27
        • 2018-11-27
        • 2018-02-15
        • 1970-01-01
        • 2018-02-23
        • 2020-08-09
        • 1970-01-01
        • 2018-04-16
        • 2019-09-24
        相关资源
        最近更新 更多