我收到错误表' test.batch_job_instance'不存在

时间:2018-03-23 06:21:34

标签: spring-batch

我是春季批次新手。我已经使用inmemoryrepository配置了我的工作。但似乎仍然使用db来持久工作Metadeta。 我的春季批量配置是:

@Configuration 公共类BatchConfiguration {

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Autowired
private JobBuilderFactory jobBuilder;

@Bean
public JobLauncher jobLauncher() throws Exception {
    SimpleJobLauncher job =new SimpleJobLauncher();
    job.setJobRepository(getJobRepo());
    job.afterPropertiesSet();
    return job;
}


@Bean
public PlatformTransactionManager getTransactionManager() {
    return new ResourcelessTransactionManager();
}

@Bean
public JobRepository getJobRepo() throws Exception {
    return new MapJobRepositoryFactoryBean(getTransactionManager()).getObject();
}




@Bean
public Step step1(JdbcBatchItemWriter<Person> writer) throws Exception {
    return stepBuilderFactory.get("step1")
        .<Person, Person> chunk(10)
        .reader(reader())
        .processor(processor())
        .writer(writer).repository(getJobRepo())
        .build();
}

 @Bean
public Job job( @Qualifier("step1") Step step1) throws Exception {
    return jobBuilder.get("myJob").start(step1).repository(getJobRepo()).build();
}

}

如何解决上述问题?

3 个答案:

答案 0 :(得分:13)

如果您使用Sprint启动 application.properties中的一个简单属性将解决该问题 spring.batch.initialize-架构= ALWAYS

答案 1 :(得分:0)

在CentOS(大多数基于Unix的系统)中使用MySql数据库面临相同问题的人。

表名称在Linux中区分大小写。设置lower_case_table_names=1已解决了问题。

查找正式文档here

答案 2 :(得分:0)

对于非 Spring Boot 设置:


在批处理配置中声明数据源 bean 时会出现此错误。为了解决这个问题,我添加了一个嵌入式数据源,因为我不想在应用程序数据库中创建这些表:

@Bean
public DataSource mysqlDataSource() {
  // create your application datasource here
}

@Bean
@Primary
public DataSource batchEmbeddedDatasource() {
    // in memory datasource required by spring batch
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
    return builder.setType(EmbeddedDatabaseType.H2)
            .addScript("classpath:schema-drop-h2.sql")
            .addScript("classpath:schema-h2.sql")
            .build();
}

初始化脚本可以在org.springframework.batch.core包下的spring-batch-core-xxx.jar中找到。
注意我使用的是内存数据库,但解决方案也适用于其他数据库系统。