【发布时间】:2021-01-20 03:07:20
【问题描述】:
我有一个 Spring Batch 作业,它每天使用不同的参数按顺序启动几次(下一个在上一个完成时启动)。 有时,我从数据库中收到 ORA-08177 错误。
为了防止这种情况,我设置了一个 customJobRepository 如下:
@Bean
public Job createCamt(...
JobRepository customJobRepository) {
return jobBuilderFactory.get("myJob")
.repository(customJobRepository)
...
.build();
}
@Bean
public JobRepository customJobRepository(
@Qualifier("centralDataSource") DataSource centralDataSource,
@Qualifier("centralTransactionManager") PlatformTransactionManager centralTransactionManager
) throws Exception {
JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean();
factoryBean.setDatabaseType("ORACLE");
factoryBean.setDataSource(centralDataSource);
factoryBean.setTransactionManager(centralTransactionManager);
factoryBean.setIsolationLevelForCreate("ISOLATION_READ_COMMITTED");
return factoryBean.getObject();
}
看起来它不起作用,因为我仍然有来自数据库的 ORA-08177 错误。
我查看了 sql 以查看是否可以使用 read commited 隔离级别打开事务并且它可以工作:
SPRING_BATCH> set transaction isolation level read committed
[2020-10-05 10:35:43] completed in 3 ms
- 为什么 Spring Batch 的隔离级别不在
read committed上? - 当每个作业单独运行时怎么会出现这个错误?
【问题讨论】:
标签: spring-batch isolation-level