首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-batch不同模式中的元数据表

Spring-batch不同模式中的元数据表
EN

Stack Overflow用户
提问于 2015-06-23 13:54:02
回答 2查看 14K关注 0票数 9

我的应用程序中有一个连接到Oracle数据库的数据源。是否可以通过此数据源访问包含Spring-batch元数据表的另一个模式?此数据源的用户具有访问其他架构的所有权限。

我已经尝试过JobRepository的"tablePrefix“属性,比如"Schema.batch_”。但它不起作用。简单地说,我搜索告诉Spring-batch访问元数据表的方法,比如"select ....from Schema.batch_..“不是"select ...from batch_...“。

EN

回答 2

Stack Overflow用户

发布于 2015-10-30 07:31:51

我也遇到过同样的问题,因为我希望将应用程序表保存在一个模式中,而将批量表保存在一个单独的模式中(使用postgres)。

tablePrefix也不适用于我(我尝试过不同的情况--都不能解决问题)。

因此,最后我决定为Spring Batch配置一个指向batch模式的单独DataSource。这就是我是如何做到的。

application.properties文件中,我有像spring.datasource.*这样的标准属性,它作为主数据源用于应用程序。

而像spring.batch.datasource.*这样的道具是非标准的,是仅在下面提供的代码中使用的辅助数据源。

以下是application.properties文件示例:

代码语言:javascript
复制
spring.datasource.url=APP_DB_CONNECTION_URL
spring.datasource.username=APP_DB_USER
spring.datasource.password=APP_DB_PASS

spring.batch.datasource.url=BATCH_DB_CONNECTION_URL
spring.batch.datasource.username=BATCH_DB_USER
spring.batch.datasource.password=BATCH_DB_PASS

然后在BatchConfiguration.java中,我添加了读取spring.batch.datasource.*属性的getBatchDataSource方法:

代码语言:javascript
复制
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

  @Bean
  @ConfigurationProperties(prefix="spring.batch.datasource")
  public DataSource getBatchDataSource(){
    return DataSourceBuilder.create().build();
  }

  ...

}

这使得Spring Batch可以使用单独的数据源。

现在重要的是正确设置spring.batch.datasource.*

对于Postgres9.4,您可以使用currentSchema参数在连接

中指定模式:jdbc:postgresql://host:port/db?currentSchema=batch

对于Postgres9.4之前的版本,您可以使用searchpath参数jdbc:postgresql://host:port/db?searchpath=batch在连接URL中指定模式

或者,您可以为batch模式创建单独的postgres用户/角色,并为该用户设置search_pathALTER USER BATCH_DB_USER SET search_path to 'batch';

在Oracle中,每个用户都有自己的模式(据我所知),并且没有办法像postgres那样在连接URL中设置模式(我可能是错的):jdbc:oracle:thin:@//host:port/sid

因此您需要为Oracle中batch模式创建一个单独的用户。另一种方法是使用spring.batch.datasource.validation-query=ALTER SESSION SET CURRENT_SCHEMA=batch (我没有尝试过这个)

因此,Spring Batch通过这种方式使用一个单独的数据源,该数据源被配置为使用专用的batch模式。批处理查询看起来仍然像select ...from batch_...,但是它是针对batch模式运行的。并且应用程序正在使用指向应用程序专用架构app的常规数据源。

此解决方案使用Spring Boot v1.2.5版本和Postgres 9.4.1进行了测试

希望这能有所帮助。

票数 17
EN

Stack Overflow用户

发布于 2020-05-28 13:39:48

因为spring.batch.table-prefix=<yourschema>.batch_对我不起作用,而且我不能立即配置第二个数据源,所以我查看了Spring Batch完成的实际表生成。

生成表的sql-Script是静态的(至少在版本4.2.2和PostgreSQL中是这样)。因此,难怪spring.batch.table-prefix不能工作。至少在我的例子中,因为表还不存在于数据库中。

为了修复它,我将schema-postgresql.sql复制到我的资源文件夹中,并根据需要对其进行了修改(创建模式并显式引用它)。

代码语言:javascript
复制
CREATE SCHEMA SPRING_BATCH;

CREATE TABLE SPRING_BATCH.BATCH_JOB_INSTANCE  (
    JOB_INSTANCE_ID BIGINT  NOT NULL PRIMARY KEY ,
    -- and so on 

在我的application.properties中,我添加了:

代码语言:javascript
复制
spring.batch.initialize-schema=always
spring.batch.table-prefix=SPRING_BATCH.BATCH_
spring.batch.schema=classpath:db/create_spring_batch_tables.sql
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30994838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档