Java SpringBatch如何在不同的数据库中写入作业数据?
我正在使用Java SpringBatch如何在不同的数据库中写入作业数据?,java,spring,spring-batch,spring-boot,Java,Spring,Spring Batch,Spring Boot,我正在使用springbatch使用BatchJpaItemWriter将大量数据持久化到数据库中 我希望将spring自动生成的作业元数据写入到与ItemWriter写入的数据不同的数据库中(嵌入h2即可) 那有可能吗?我必须在哪里设置不同的数据源或TransactionManager,以便持久化作业元数据?当然可以,但一旦创建第二个数据源,您将不得不自动连接问题,因为Spring将开始查找两个候选bean。以下是您可以绕过此问题的方法: (1) 用@Primary标记您当前的数据源bean(
springbatch
使用BatchJpaItemWriter
将大量数据持久化到数据库中
我希望将spring自动生成的作业元数据写入到与ItemWriter写入的数据不同的数据库中(嵌入h2即可)
那有可能吗?我必须在哪里设置不同的数据源或TransactionManager,以便持久化作业元数据?当然可以,但一旦创建第二个数据源,您将不得不自动连接问题,因为Spring将开始查找两个候选bean。以下是您可以绕过此问题的方法: (1) 用@Primary标记您当前的数据源bean(如果尚未创建此bean,则需要显式创建此bean) (2) 为您的作业元数据创建新的数据源(同上),并为其命名
(3) 使用@Qualifier在用于持久化作业元数据的存储库中自动连接此新数据源。结果表明,我的配置已在运行,但spring boot会在启动时自动加载它们
schema-{db}.sql
脚本。因此,我的主数据库中总是有元数据
解决方案是一个简单的属性:
spring.batch.initializer.enabled=false
谢谢,我会试试这个。但是:我使用的是MapJobRepositoryFactoryBean、MapJobExplorerFactoryBean、SimpleBlancher
(类似于doDefaultBatchConfigurer
。我必须在哪里传递我的自定义元数据数据库?因为它们中没有一个以DataSource
作为参数…也许我还不够具体:我希望数据由JpaItemWriter
使用spring batch持久化,但是与作业执行一起写入的批元数据ion应该改为h2。我不太清楚spring批处理的详细信息,除了两个数据源配置之外,还不能为您提供帮助。对不起,您可能需要一个分布式事务的配置
@Bean(name = "mainDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource") //assuming connection, credentials configured in application.properties
public DataSource createDataSource() {
return DataSourceBuilder.create().build();
}