我正在使用Spring-Batch
使用批处理JpaItemWriter<T>
在数据库中保存大量数据。
我希望将spring自动生成的作业元数据写入与ItemWriter写入的数据不同的数据库(embedded h2
就足够了。)
这有可能吗?我必须在哪里设置不同的DataSource或TransactionManager,以便持久保存作业元数据?
答案 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在您用来保存作业元数据的存储库中自动装配这个新数据源。