如何在与Spring Boot + Batch应用程序不同的模式中访问元数据表?

时间:2014-12-17 09:28:24

标签: spring spring-boot spring-batch

在我的Spring Boot应用程序中,我喜欢使用具有特定架构的Spring Batch元表。 documentation建议使用表前缀。

我尝试将batch.table.prefix=abc.BATCH_添加到属性文件中。我还试图覆盖配置:

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Bean
    public JobRepository jobRepository(DataSource dataSource) throws Exception {
        final JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
        factory.setDataSource(dataSource);
        factory.setTablePrefix("abc.BATCH_");
        factory.setTransactionManager(transactionManager(dataSource));
        factory.afterPropertiesSet();
        return factory.getObject();
    }

    @Bean
    public JobExplorer jobExplorer(DataSource dataSource) throws Exception {
        final JobExplorerFactoryBean factory = new JobExplorerFactoryBean();
        factory.setDataSource(dataSource);
        factory.setTablePrefix("abs.BATCH_");
        factory.afterPropertiesSet();
        return factory.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    ...
}

但我总是得到错误: 引起:org.h2.jdbc.JdbcSQLException:表" BATCH_JOB_INSTANCE"未找到; SQL语句: SELECT JOB_INSTANCE_ID,来自BATCH_JOB_INSTANCE的JOB_NAME = JOB_NAME =?和JOB_KEY =? [42102-182]

2 个答案:

答案 0 :(得分:3)

我认为使用@EnableBatchProcessing更改存储库/资源管理器的最佳方法是提供您自己的BatchConfigurer(只是一个bean定义)。您可以轻松扩展其中一个现有实例。

答案 1 :(得分:0)

在我的情况下,我使用mysql作为数据库,我收到了这个错误。我这样解决了:

1.复制mysql(例如,mongo db,hsqldb等)查询(创建和插入查询)来自以下jar spring-batch-core jar。  

2.在您使用过的数据库中粘贴插入并创建查询(如mysql,mongo,hsqldb等)并执行所有操作,将创建所需的表,并将表中的数据插入相应的表中。

3.运行您的批处理程序,它将找到“batch_job_instance”表和其他必需的表。