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

Spring批处理未获得Spring属性。一批表前缀

戚京
2023-03-14

当我在应用程序属性中添加表前缀时,我遇到了一个问题,Spring Batch没有获取该属性并设置默认前缀Batch。

spring.batch.table-prefix=SOMETHING.BATCH_

Spring版

<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.错误的SQL语法[SELECTJOB_INSTANCE_ID,JOB_NAMEBATCH_JOB_INSTANCEJOB_NAME=?和JOB_KEY = ?]; 嵌套异常java.sql.SQLSyntaErrorException: ORA-00942: table or view不存在

共有1个答案

益泰平
2023-03-14

我解决了问题,效果很好。

我注入了一个用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;
    }
 类似资料:
  • 在Spring batch中(请参见https://docs.Spring.io/spring-batch/3.0.x/reference/html/metadataschema.html),有六个表: batch_job_execution batch_job_execution_context batch_job_execution_params batch_job_instance batc

  • 我想为spring批处理使用不同的数据源,并创建了下面的配置类,并根据文档将我所需的数据源自动连接到该类。 我使用的是spring boot(2.2.6)和spring batch版本4.2.1。释放 但当我用它启动应用程序时,它从不应用setTablePrefix,并且总是会失败,出现table not found错误。 我需要使用上面的方法,因为我有两个不同的数据源,我需要spring批处理来

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我有一个compositeItemWriter,它有2个代理编写器:1。HeaderWriter将一些字段从我的对象写入头表2。DetailWriter将文件写入详细表。 context.xml:

  • 我们开发了一个Spring批处理应用程序,其中我们有两个流程。1.向前2.向后。我们只使用文件读/写,不涉及数据库。 > 正向场景:输入文件将包含22个字段的记录。通过执行序列号生成和添加一些填充字段等操作,将22个字段转换为32个字段。根据国家代码,输出将被分成最多3个。每个块将有250K条记录。(如果记录以百万为单位,则将为同一国家生成多个文件)。 800万张唱片需要36分钟。 800万记录将

  • 反正可以禁用SQL,我只是想测试我的读写器和处理器工作正常。