【问题标题】:Spring-batch doesn't get the property spring.batch.table-prefixSpring-batch 没有得到属性 spring.batch.table-prefix
【发布时间】:2019-07-16 13:33:07
【问题描述】:

我在应用程序属性中添加表前缀时出现问题,Spring-Batch 没有获取该属性并设置了默认前缀 BATCH_。

spring.batch.table-prefix=SOMETHING.BATCH_

春季版

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
</parent>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.4.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
        <version>2.1.2.RELEASE</version>
 </dependency>

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的 SQL 语法 [SELECT JOB_INSTANCE_ID, JOB_NAME 来自 BATCH_JOB_INSTANCE,其中 JOB_NAME = ?和 JOB_KEY = ?]; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: table 或视图不存在

【问题讨论】:

标签: java spring spring-batch


【解决方案1】:

我解决了这个问题,它工作正常。

我注入了一个用 JobRepositoryFactoryBean 创建的新 JobRepository。 在 JobRepositoryFactoryBean 中,我已经配置了数据源和前缀,当作业启动时,JdbcJobInstanceDao 具有前缀。

我分享解决方案:

       private PlatformTransactionManager transactionManager(){
          return new ResourcelessTransactionManager();
        }
      private JobRepository createJobRepository() throws Exception {
         JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
         factory.setDataSource(dataSourceAudit);
         factory.setTransactionManager(transactionManager());
         factory.setIsolationLevelForCreate("ISOLATION_READ_COMMITTED");
         factory.setTablePrefix("SOMETHING.BATCH_");
         factory.setDatabaseType("ORACLE");
         factory.setMaxVarCharLength(1000);
          return factory.getObject();
      }

      @Bean
        public JobLauncher jobLauncherBc() throws Exception{
             SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
             jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
             jobLauncher.setJobRepository(createJobRepository());
            return jobLauncher;
    }

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 2014-11-01
    • 2017-01-21
    • 1970-01-01
    • 2013-08-02
    • 2012-06-18
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多