Spring-Batch如何在不同的数据库中编写作业元数据?

时间:2014-09-08 11:23:56

标签: java spring spring-batch spring-boot

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

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

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

2 个答案:

答案 0 :(得分:3)

事实证明我的配置已经运行,但是spring-boot会在启动时自动加载它们schema-{db}.sql脚本。因此,我总是在主数据库中有元数据。

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

spring.batch.initializer.enabled=false

答案 1 :(得分:1)

当然,但是一旦你创建了第二个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在您用来保存作业元数据的存储库中自动装配这个新数据源。