可以将不同的数据源用于Job Repository,而不是Spring-Bot Batch项目中的项目阅读器



刚刚使用Spring-data-jpa设置了我的第一个Spring-bact项目。我在开发环境中有一个有效的解决方案,通过我的ItemReader中的Oracle db,我在我的处理器中对oracle db的一些行消耗一些XML/HTML,然后使用自定义将每个提取的HTML输出到单个文件中itemwriter。(每行1个文件(

我的数据源是通过启动项目(application.properties(中的spring-data-jpa配置的...

我注意到OOTB Spring Batch使用可用数据源创建了其Jobrepository的各种模式对象。

在开发环境中这很好,但是我在生产Oracle DB环境中只有"读取"访问权限,我的ItemReader将获得其官方数据。

我尝试配置我遇到的春季文档中概述的2个数据源..但无法正常工作。我还尝试使用内存中的内存,但也无法正常工作。

所以这可能吗?或者我应该继续插上内存工作回购工作吗?

我目前不太关心重新启动性。.批处理作业将在我的桌面上作为独立的Spring-Boot应用程序运行。

任何帮助,提示,信息将不胜感激。

更新:

尝试内存配置,这是我的批处理配置类的一部分:

   @Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);

    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
    @Autowired
    EntityManagerFactory emf;
    @Bean
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
        simpleJobLauncher.setJobRepository(jobRepository);
        return simpleJobLauncher;
    }
    @Bean
    public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
        MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
        mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
        return mapJobRepositoryFactoryBean.getObject();
    }
    @Bean
    public ResourcelessTransactionManager transactionManager() {
        return new ResourcelessTransactionManager();
    }

项目编译还可以,但是当我运行时,我会得到以下内容:

由:org.springframework.jdbc.badsqlgrammarexception:repardstatementCallback;糟糕的sql语法[select job_instance_id,job_name来自batch_job_instance where job_name =?订购Job_instance_id desc];嵌套异常是java.sql.sqlsyntaxerrorexception:ora-00942:表或视图不存在

因此,它似乎仍在尝试连接到甲骨文,而不是使用内存DB ..

好吧...看来此配置对我的情况有了技巧。

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);

    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
    @Autowired
    EntityManagerFactory emf;
    @Bean
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) throws Exception {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
        simpleJobLauncher.setJobRepository(jobRepository);
        simpleJobLauncher.afterPropertiesSet();
        return simpleJobLauncher;
    }
    @Bean
    public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager)
            throws Exception {
        MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager);
        factory.afterPropertiesSet();
        return factory;
    }
    @Bean
    public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception {
         return factory.getObject();
    }
    @Bean
    public ResourcelessTransactionManager  resourcelessTransactionManager() {
        return new ResourcelessTransactionManager();
    }
    @Bean
    public JobExplorer jobExplorer(MapJobRepositoryFactoryBean factory) {
        return new SimpleJobExplorer(factory.getJobInstanceDao(), factory.getJobExecutionDao(),
                factory.getStepExecutionDao(), factory.getExecutionContextDao());
    }

相关内容

最新更新