Spring Batch不使用自定义数据源创建表
我正在使用REST服务(使用Spring引导),该服务运行批处理作业。我希望Batch仅与嵌入式数据源(用于存储元数据)一起使用,而默认数据源(在我的情况下为Postgres)将用于存储企业实体。
问题在于,Batch会在启动时尝试在默认数据源中创建元数据表(如 batch_job_execution , batch_job_instance
等)。
这是重现问题的示例配置:
@Configuration@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {
    @Override
    @Autowired
    public void setDataSource(@Qualifier("batchDataSource") DataSource dataSource) {
        super.setDataSource(dataSource);
    }
}
@Configurationpublic class DataSourceConfiguration {
    @Bean
    @Primary
    public DataSource DataSource() {
        final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
        dataSource.setDriverClass(org.postgresql.Driver.class);
        dataSource.setUrl("jdbc:postgresql://localhost:5432/test_batch");
        dataSource.setUsername("user");
        dataSource.setPassword("password");
        return dataSource;
    }
    @Bean(name = "batchDataSource")
    public DataSource batchDataSource() {
        return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
    }
}
通过这种配置,我在微服务启动时在Postgres中获得了批处理表,尽管看起来有些麻烦,但是似乎使用了嵌入式数据源,因为在尝试启动作业时,H2出现
“找不到表” 错误。
那么,如何正确编写配置以使Batch仅适用于嵌入式数据源?我不希望主数据源中有任何元数据(甚至是空表)。
正如Michael Minella所说,应该再添加一个bean:
@Configuration@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {
    @Override
    @Autowired
    public void setDataSource(@Qualifier("batchDataSource") DataSource dataSource) {
        super.setDataSource(dataSource);
    }
    @Bean
    public BatchDatabaseInitializer   batchDatabaseInitializer(@Qualifier("batchDataSource") DataSource dataSource, ResourceLoader resourceLoader){
        BatchDatabaseInitializer batchDatabaseInitializer = new     BatchDatabaseInitializer(dataSource, resourceLoader, new BatchProperties());
        return batchDatabaseInitializer;
    }
}
回答:
不幸DataSource的BatchDataSourceInitializer是,使用Spring
Boot所使用的与无关BatchConfigurer。它只是DataSource在上下文中获取默认值。如果您配置自己的BatchDataSourceInitializer,Boot
one不会启动,您可以定义DataSource直接使用哪一个。
以上是 Spring Batch不使用自定义数据源创建表 的全部内容, 来源链接: utcz.com/qa/422994.html








