gpt4 book ai didi

spring-batch - Spring Batch - 如何防止批处理在数据库中存储事务

转载 作者:行者123 更新时间:2023-12-04 05:05:13 29 4
gpt4 key购买 nike

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

尝试的解决方案:

搜索 Stack Overflow 我找到了这个帖子: Spring-Batch without persisting metadata to database?

这听起来很完美,所以我添加了

@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();
}

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

但是我明白了

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]

所以我不确定在这里做什么。我是 Spring 的新手,所以我边走边自学。我对其他解决方案持开放态度,例如内存数据库,但我也无法让它们工作。我不需要在运行之间保存任何状态或 session 信息,但我正在运行的数据库查询将返回大约一百万行左右,因此我需要将其分块获取。

如有任何建议或帮助,我们将不胜感激。

最佳答案

将这个 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;
}

关于spring-batch - Spring Batch - 如何防止批处理在数据库中存储事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652942/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com