我正在将java代码(使用springboot spring batch)和数据库从dev服务器复制到本地(桌面)并运行它。获取错误。
它在Dev服务器上运行良好。在本地,spring-batch正在将作业实例重置为1,并导致主键error.Is在spring batch中有什么选项,以便它以下一个实例id而不是1开始?请让我知道
下面提到了stackoverflow链接,看起来是相关的,但几年前发布的参考链接不再起作用。Duplicate Spring Batch Job Instance
@Configuration
@EnableBatchProcessing
public class Jobclass {
#Rest of the code with Job Bean and steps which works fine in Dev server
}错误: com.microsoft.sqlserver.jdbc.SQLServerException:违反主键约束'PK__BATCH_JO__4848154AFB5435C7‘。无法在对象'dbo.BATCH_JOB_INSTANCE‘中插入重复的键。重复键值为(5)。
发布于 2019-09-20 14:47:39
在spring batch中有什么选项可以让它从下一个实例id开始吗
为了回答您的问题,您正在寻找的“选项”是RunIdIncrementer。它每次都会递增一个名为"run.id“的作业参数,这样每次运行时都会有一个新的实例。
然而,这不是我解决问题的方法(参见我的评论)。您需要检查为什么会发生这种重复键异常,并修复它。检查您是否正在使用相同的参数启动作业,从而导致相同的实例(即使发生了这种情况,如果正确配置了作业存储库的事务隔离级别,则不应出现此类异常,如果上次执行成功,则会出现JobInstanceAlreadyCompleteException;如果上次执行失败,则会出现JobExecutionAlreadyRunningException,而另一次执行当前正在运行)。
发布于 2022-02-15 21:12:50
当我将一个匿名的生产数据库转移到另一个系统时,同样的事情也发生在我身上。事实证明,有问题的匿名工具(PostgreSQL Anonymizer)有一个bug,它会导致剥离为导出的序列设置下一个值的命令,所以这是根本原因。
这也会导致堆栈跟踪中报告的ID在每次尝试时都递增1 -因为序列错误地从1开始,但之前的许多执行都存储在Spring Batch的表中。
当我通过自己设置下一个值来回避这个问题时,问题就消失了。在我的例子中,这相当于:
SELECT pg_catalog.setval('public.batch_job_execution_seq', 6482, true);
SELECT pg_catalog.setval('public.batch_job_seq', 6482, true);
SELECT pg_catalog.setval('public.batch_step_execution_seq', 6482, true);https://stackoverflow.com/questions/58020474
复制相似问题