【问题标题】:Spring-Batch how to write job metdata in different database?Spring-Batch 如何在不同的数据库中写入作业元数据?
【发布时间】:2014-11-01 14:34:58
【问题描述】:

我正在使用Spring-Batch 使用批处理JpaItemWriter<T> 将大量数据保存在数据库中。

我希望将 spring 自动生成的作业元数据写入与 ItemWriter 写入的数据不同的数据库(embedded h2 就足够了)。

这可能吗?我必须在哪里设置不同的 DataSource 或 TransactionManager 才能持久保存作业元数据?

【问题讨论】:

    标签: java spring spring-batch spring-boot


    【解决方案1】:

    原来我的配置已经在工作了,但是 spring-boot 会在启动时自动加载它们 schema-{db}.sql 脚本。因此,我的主数据库中总是有元数据。

    解决方案是一个简单的属性:

    spring.batch.initializer.enabled=false

    【讨论】:

      【解决方案2】:

      当然可以,但是一旦您创建了第二个 DataSource,您将不得不遇到自动装配问题,因为 Spring 将开始寻找两个候选 bean。以下是解决此问题的方法:

      (1) 使用 @Primary 标记您当前的数据源 bean(如果您还没有这样做,则需要显式创建此 bean)

          @Bean(name = "mainDataSource")
          @Primary
          @ConfigurationProperties(prefix = "spring.datasource") //assuming connection, credentials configured in application.properties
          public DataSource createDataSource() {
              return DataSourceBuilder.create().build();
          }
      

      (2) 为您的工作元数据创建新数据源(同上),并为其命名。

      (3) 使用@Qualifier 将这个新数据源自动装配到用于持久化作业元数据的存储库中。

      【讨论】:

      • 谢谢,我会试试这个。但是:我正在使用MapJobRepositoryFactoryBean, MapJobExplorerFactoryBean, SimpleJobLauncher(类似DefaultBatchConfigurer。我必须在哪里传递我的自定义元数据数据库?因为它们都没有将DataSource 作为参数......
      • 也许我还不够具体:我希望 JpaItemWriter 使用 spring 批处理来持久化数据,但是与作业执行一起编写的批处理元数据应该改为 h2.
      • 我不太了解 Spring Batch 的细节,无法帮助您超越两个数据源的配置。对不起。
      • 可能你需要一个分布式事务的配置
      猜你喜欢
      • 2020-02-23
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 2018-02-22
      • 2021-10-07
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多