不同模式中的 Spring 批处理表

use*_*700 5 schema spring-batch

我想使用不同的架构来保存 Spring Batch 表。我可以看到我的新数据源设置在JobRepositoryFactoryBean. 但这些表仍然是在我有业务表的其他 shcema 中创建的。我读到了一些可以用来dataSource.setValidationQuery改变模式的地方,但仍然不起作用。我可以解决这个问题。下面是JobRepositoryFactoryBeanDatasource道具。

 @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());
Run Code Online (Sandbox Code Playgroud)

T D*_*T D 5

application.properties中的以下属性对我有用。这将在数据库中的 new_schema 下创建元架构表。

spring.batch.tablePrefix=new_schema.BATCH_
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的 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>
Run Code Online (Sandbox Code Playgroud)


Mic*_*lla 2

使用 Spring Batch 时@EnableBatchProcessingDataSourceSpring Batch 表使用的表是BatchConfigurer. DataSource如果您在应用程序中使用多个接口,则必须创建自己的接口BatchConfigurer(通过扩展DefaultBatchConfigurer或实现接口),以便 Spring Batch 知道要使用哪一个。您可以在此处的参考文档中阅读有关此自定义的更多信息: https: //docs.spring.io/spring-batch/4.0.x/reference/html/job.html#configuringJobRepository

  • 好,谢谢。所以现在我扩展了 DefaultBatchConfigurer 并提供了数据源。现在它说表不存在。这是否意味着我们需要自己创建tablet。我认为情况不应该是这样,因为它在使用 DefaultBatchConfigurer 之前在其他数据源上自己创建了表。从 BATCH_JOB_INSTANCE 中选择 JOB_INSTANCE_ID、JOB_NAME,其中 JOB_NAME = ? 按 JOB_INSTANCE_ID desc 排序];嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在 (2认同)