Spring批处理:无法递增标识;嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:无效 object 名称 'BATCH_JOB_SEQ'?

Spring Batch: Could not increment identity; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'BATCH_JOB_SEQ'?

我们正在为我们的 Spring 批处理应用程序从 Oracle DB 迁移到 Azure SQL 服务器。

我在尝试执行作业 post 迁移到 SQL 服务器时出现以下错误

Could not increment identity; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'AppName.BATCH_JOB_SEQ'.

我可以 SQL 服务器具有所需的序列

作业存储库配置下方

<batch:job-repository id="jobRepository"
 isolation-level-for-create="READ_COMMITTED"
 table-prefix="MyApp.BATCH_"/>

以下是 Oracle 中可用的表和序列

下面是 Azure 中可用的表格和序列 SQL

我使用的是以下版本

我应该升级到

或者我应该根据 https://github.com/spring-projects/spring-batch/blob/main/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql

重新创建表格

错误可能与从 Oracle 迁移到 Azure SQL 服务器有关。

如您在 source code of the library under the hood Spring Batch uses different strategies when generating the ids for jobs, job executions, and step executions 中所见。

在 Oracle 案例中,他们使用 sequences; with SQL Server, they implemented id generation using tables with an identity column

迁移过程还复制了 Spring 批处理所需的不同 Oracle 序列,并且很可能在上述 SQL 服务器 ID 生成策略尝试获取下一个值时导致问题。

请删除迁移的序列并使用适当的值创建 SQL 服务器所需的 three tables

CREATE TABLE BATCH_STEP_EXECUTION_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);

CREATE TABLE BATCH_JOB_EXECUTION_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);

CREATE TABLE BATCH_JOB_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);