Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBatch如何在不同的数据库中写入作业数据?_Java_Spring_Spring Batch_Spring Boot - Fatal编程技术网

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
使用Batch
JpaItemWriter
将大量数据持久化到数据库中

我希望将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
(类似于do
DefaultBatchConfigurer
。我必须在哪里传递我的自定义元数据数据库?因为它们中没有一个以
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();
    }