当前位置: 首页 > 知识库问答 >
问题:

不同模式中的Spring批处理表

阚允晨
2023-03-14

我想使用不同的模式来保存Spring批处理表。我可以在<code>JobRepositoryFactoryBean<code>中看到我的新数据源。但这些表仍然是在另一个shcema中创建的,在那里我有业务表。我在这里读到了可以使用<code>数据源的soemwhere。setValidationQuery来更改模式,但仍然不起作用。我能解决这个问题。下面是<code>JobRepositoryFactoryBean

 @Bean
 @Qualifier("batchDataSource")
 protected JobRepository createJobRepository() throws Exception {
    JobRepositoryFactoryBean factory = createJobRepositoryFactoryBean();    
    factory.setDataSource(getDataSource());
    if (getDbType() != null) {
      factory.setDatabaseType(getDbType());
    }
    factory.setTransactionManager(getTransactionManager());
    factory.setIsolationLevelForCreate(getIsolationLevel());
    factory.setMaxVarCharLength(maxVarCharLength);
    factory.setTablePrefix(getTablePrefix());
    factory.setValidateTransactionState(validateTransactionState);
    factory.afterPropertiesSet();
    return factory.getObject();
  }

 spring.datasource.url=url
 spring.datasource.username=username
 spring.datasource.password=pwd
spring.datasource.driver-class-name:oracle.jdbc.driver.OracleDriver
spring.datasource.validation-query=ALTER SESSION SET 
 CURRENT_SCHEMA=schemaname

#batch setting
spring.batch.datasource.url=burl
spring.batch.datasource.username=busername
spring.batch.datasource.password=bpwd
spring.batch.datasource.driver-class-name:oracle.jdbc.driver.OracleDriver
spring.batch.datasource.validation-query=ALTER SESSION SET 
CURRENT_SCHEMA=batchschema

 org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
      dataSource.setName("batchDataSourceName");
      dataSource.setDriverClassName(batchDataSourceProperties.getDriverClassName());
      dataSource.setUrl(batchDataSourceProperties.getUrl());
      dataSource.setUsername(batchDataSourceProperties.getUsername());
      dataSource.setPassword(batchDataSourceProperties.getPassword());
     // dataSource.setValidationQuery(batchDataSourceProperties.getValidationQuery());

共有3个答案

胡天佑
2023-03-14

复制现有的数据源属性,并重写BatchConfigurer以返回这个新的数据源。然后,在新数据源的属性中,更改

>

  • 将数据库连接到一个默认模式定义为Spring Batch表所需模式的用户

    包含Spring Batch表所需架构的连接url。

    您选择的选项将取决于您的数据库类型,如下所示:

    对于SQL服务器,您可以为用于连接到数据库的用户定义默认模式(I

    CREATE SCHEMA batchschema;
    
    USE database;
    CREATE USER batchuser;
    GRANT CREATE TABLE TO batchuser;    
    ALTER USER batchuser WITH DEFAULT_SCHEMA = batchschema;
    ALTER AUTHORIZATION ON SCHEMA::batchschema TO batchuser;
    

    对于Postgres 9.4,您可以使用电流模式参数在连接URL中指定模式:jdbc: postgresql://host: port/db?电流模式=批处理

    对于Postgres 9.4之前的版本,您可以使用search chpath参数在连接URL中指定架构:jdbc: postgresql://host: port/db?搜索路径=批处理

    对于 Oracle,看起来需要在会话上设置架构。我不完全确定这个将如何工作...

    ALTER SESSION SET CURRENT_SCHEMA batchschema
    

    限定每个数据源,将要用于 Batch 表的数据源设置为@Primary,并为 DefaultBatchConfigurer 设置数据源,如下所示:

    @Bean(name="otherDataSource")
    public DataSource otherDataSource() {
        //...
    }
    
    @Primary
    @Bean(name="batchDataSource")
    public DataSource batchDataSource() {
        //...
    }
    
    @Bean
    BatchConfigurer configurer(@Qualifier("batchDataSource") DataSource dataSource){
        return new DefaultBatchConfigurer(dataSource);
    }
    

  • 柯国安
    2023-03-14

    当使用Spring Batch的<code>@EnableBatchProcessing<code>时,Spring Batch表使用的<code>数据源数据源,则必须创建自己的批配置器(通过扩展DefaultBatchConfigurer或实现接口),以便Spring Batch知道使用哪个。您可以在此处的参考文档中阅读有关此自定义的更多信息:https://docs.spring.io/spring-batch/4.0.x/reference/html/job.html#configuringJobRepository

    顾俊茂
    2023-03-14

    应用程序中的以下属性.属性正在为我工作。这将在数据库中new_schema下创建元架构表。

    spring.batch.tablePrefix=new_schema.BATCH_
    

    下面是我使用的springBoot版本。

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
     类似资料:
    • 我的应用程序中有一个连接到Oracle数据库的数据源。是否可以通过此数据源访问另一个包含Spring批处理元数据表的模式?此数据源的用户拥有访问其他架构的所有权限。 我已经尝试过JobRepository的“tablePrefix”属性,例如“Schema.batch\u0”。但它不起作用。简单地说,我搜索告诉Spring批处理访问元数据表的方法,如“select….from Schema.bat

    • 在Spring批处理作业中,我将项目写入目标文件(使用FlatFileItemWriter),并将输入记录“process indicator”字段更新为“processed”/“failed”(使用JdbcBatchItemWriter)。在“物品交易”中实现这一点的最佳方式是什么? 使用CompositeItemWriter(委托FlatFileItemWriter写入文件,委托JdbcBat

    • 我正在做一个项目,我将使用Spring批处理和Spring集成来创建工作流系统。这个工作流系统应该能够从队列中读取消息,这实际上是来自客户端的作业请求,根据作业请求类型,我需要调用一些7-8系统。 每个系统从某个位置读取输入文件(通常是一个集中存储系统,其中所有输入文件都存储在客户提交的文件中),对其进行处理,然后将其传递给下一个系统,最终我应该能够响应客户端,例如SUCCESS如果它被所有系统成

    • 我的要求是为不同格式的文件(PSV和CSV)轮询两个不同的目录,并使用Spring批处理它。 我使用入站通道适配器轮询目录。但是,我无法找到一种方法来根据文件类型调用相应的阅读器及其标记器和字段映射器。 例如,如果它是psv-调用PSV阅读器,如果它是csv-调用CSVReader,CSV线路映射器 任何帮助都将不胜感激。 谢谢

    • 在我的Spring Boot应用程序中,我喜欢使用带有特定模式的Spring Batch元表。留档建议使用表前缀。 我尝试将添加到属性文件中。我还尝试覆盖配置: 但我总是得到错误:由:org引起。h2。jdbc。JdbcSQLException:未找到表“批处理作业实例”;SQL语句:从批处理作业实例中选择作业实例ID、作业名称,其中作业名称=?而JOB_KEY=?[42102-182]