【发布时间】:2020-11-26 03:51:40
【问题描述】:
我有一个使用 Hibernate 和 Spring Batch 的 Spring Boot 应用程序。我正在为我的后端数据库使用 PostgresSQL。
我的项目配置了 2 个不同的数据源。 一个用于 Hibernate,一个用于 Spring Batch。它们都在同一个数据库中但在不同的架构中。
我的spring批处理连接字符串如下:
spring.batch.datasource.url=jdbc:postgresql://localhost:5432/mytestapp?currentSchema=springbatch
我的数据源配置如下:
@Bean("b_ds_prop")
@ConfigurationProperties("spring.batch.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean("b_ds")
@DependsOn({"b_ds_prop"})
public DataSource batchFrameworkDatasource(DataSourceProperties dataSourceProperties) {
System.out.println("start print");
// dataSourceProperties.getSchema().stream().forEach(System.out::println);
// System.out.println("datasrcprop is null : " + (dataSourceProperties==null));
// System.out.println("datasrcprop.schema is null : " + (dataSourceProperties.getSchema()==null));
System.out.println("end print");
// dataSourceProperties.setSchema(Arrays.asList("spring_batch"));
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@DependsOn({"b_ds"})
public BatchConfigurer defaultBatchConfigurer(@Qualifier("b_ds") DataSource dataSource) {
return new DefaultBatchConfigurer(dataSource);
}
currentSchema=springbatch 设置不受尊重,无论我做什么。 我所有的 Spring Batch 表在 Postgres 中总是以 public 结尾。
名为springbatch 的架构已经存在于我的数据库中:mytestapp。
我试过currentSchema=springbatch, public,我什至试过spring.batch.table-prefix=springbatch.。
我已经尝试了所有方法,但我仍然无法理解为什么我的批处理表总是以 public 模式结束。
请注意,我的项目中有另一个连接字符串,例如:
spring.hib.datasource.url=jdbc:postgresql://localhost:5432/mytestapp
我还尝试以编程方式检查 schema 在 DataSourceProperties 中的值。
System.out.println("datasrcprop.schema is null : " + (dataSourceProperties.getSchema()==null));
这评估为真。
如何为 Spring Batch 设置不同的架构?
任何帮助都会很棒。
谢谢。
【问题讨论】:
-
Spring Batch 针对数据源工作(它不知道模式)并且不创建表。由于您创建了
BatchConfigurer并将b_ds数据源传递给它,因此您需要在启动应用程序之前手动针对该数据源运行 postgres DDL 脚本,或者告诉 Spring Boot 为您执行此操作(并确保它将使用 Spring Batch 表初始化 那个 数据源)。
标签: java spring postgresql spring-batch datasource