gpt4 book ai didi

java - 尝试在多个实例上运行批处理作业时出现 DuplicateKey 异常

转载 作者:行者123 更新时间:2023-12-02 08:48:32 24 4
gpt4 key购买 nike

我正在集群中同时使用相同的参数运行批处理作业。不过,它只在一个实例上运行这很好,但我得到的异常(exception)是:

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?

最佳答案

如果您在作业存储库上正确配置了隔离级别,则不会发生这种情况。您没有共享作业存储库配置,但您可以在 Configuring a JobRepository 中找到示例和 Transaction Configuration for the 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();
}

激进的隔离级别可以防止在集群环境中创建重复的作业实例。 SERIALIZABLEREAD_COMMITTED 应该可以工作。

关于java - 尝试在多个实例上运行批处理作业时出现 DuplicateKey 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926356/

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