Spring Batch - 如何防止批处理在DB中存储事务

Vyd*_*ope 2 spring-batch spring-java-config

首先是问题陈述:我在DEV环境中使用Spring-Batch很好.当我将代码移动到生产环境时,我遇到了问题.在我的DEV环境中,Spring-Batch能够在我们的DB2数据库服务器中创建它的事务数据表而没有问题.当我们去PROD时这不是一个选项,因为这是一个只读工作.

尝试解决方案:

搜索Stack Overflow我发现这个帖子: Spring-Batch没有将元数据保存到数据库?

这听起来很完美,所以我补充道

@Bean
public ResourcelessTransactionManager transactionManager() {
    return new ResourcelessTransactionManager();
}

@Bean
public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
    MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
    mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);

    return mapJobRepositoryFactoryBean.getObject();
}
Run Code Online (Sandbox Code Playgroud)

我还通过调用.reporitory(jobRepository)将它添加到我的Job中.

但我明白了

Caused by: java.lang.NullPointerException: null
    at       org.springframework.batch.core.repository.dao.MapJobExecutionDao.synchronizeStatus(MapJobExecutionDao.java:158) ~[spring-batch-core-3.0.6.RELEASE.jar:3.0.6.RELEASE]
Run Code Online (Sandbox Code Playgroud)

所以我不知道该怎么做.我是春天的新手,所以我一边教我自己.我对其他解决方案持开放态度,例如内存数据库,但我也无法让它们工作.我不需要在运行之间保存任何状态或会话信息,但我运行的数据库查询将返回大约一百万行左右,因此我需要以块的形式获取.

任何建议或帮助将不胜感激.

小智 5

将此bean添加到AppClass

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


@Bean
public JobExplorer jobExplorer() throws Exception {
    MapJobExplorerFactoryBean jobExplorerFactory = new MapJobExplorerFactoryBean(mapJobRepositoryFactoryBean());
    jobExplorerFactory.afterPropertiesSet();
    return jobExplorerFactory.getObject();
}

@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean() {
    MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean();
    mapJobRepositoryFactoryBean.setTransactionManager(transactionManager());
    return mapJobRepositoryFactoryBean;
}

@Bean
public JobRepository jobRepository() throws Exception {
    return mapJobRepositoryFactoryBean().getObject();
}

@Bean
public JobLauncher jobLauncher() throws Exception {
    SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
    simpleJobLauncher.setJobRepository(jobRepository());
    return simpleJobLauncher;
}
Run Code Online (Sandbox Code Playgroud)