gpt4 book ai didi

java - Spring Batch 不使用自定义数据源来创建表

转载 作者:行者123 更新时间:2023-12-03 23:18:26 33 4
gpt4 key购买 nike

我正在研究 REST 服务(使用 Spring Boot),它运行批处理作业。我希望 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);
}
}

数据源配置
@Configuration
public 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 中获取批处理表,尽管之后似乎使用了嵌入式数据源,因为在尝试启 Action 业时出现 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;
}
}

最佳答案

使用 Spring Boot DataSourceBatchDataSourceInitializer 使用不幸的是,与 BatchConfigurer 无关.它只是抓取默认的 DataSource在上下文中。如果您自己配置 BatchDataSourceInitializer , Boot one 不会启动,您可以定义哪个 DataSource直接使用。

关于java - Spring Batch 不使用自定义数据源来创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43655213/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com