我在同一时间使用相同的参数运行在集群中的批处理作业。虽然,它的精细,它是一个实例,但我得到的唯一的例外是运行:
Detail: Key (job_name, job_key)=(offlineTicketRefreshJob, c5d36835a13fd8ae0e91a69a6fa1c2d8) already exists.; nested exception is org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "job_inst_un"
我期待它会给JobAlreadyRunningException或其他。我觉得隔离级别也是序列化的批处理作业仓库,所以为什么它给PSQLException?
如果你正确地配置你的工作库中的隔离级别不应该发生。你不同意你的工作库配置,但你可以找到一个例子INT的配置JobRepository并为JobRepository事务配置部分:
// This would reside in your BatchConfigurer implementation
@Override
protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE");
factory.setTablePrefix("BATCH_");
factory.setMaxVarCharLength(1000);
return factory.getObject();
}
一个积极的隔离级别可以防止在集群环境中创建重复的工作情况。SERIALIZABLE
并READ_COMMITTED
应工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句