gpt4 book ai didi

Spring Batch 为 H2 在 SQL 语句中创建语法错误

转载 作者:行者123 更新时间:2023-12-05 03:32:20 25 4
gpt4 key购买 nike

我将 Spring Boot & Batch 从 1.5.9 升级到 Spring Boot & Batch 2.5.6。现在我遇到了 Spring Batch 模式初始化的问题。我在 JUnit5 测试类中运行 H2。首先尝试通过 Spring Batch 初始化:

spring:
batch:
jdbc:
initialize-schema: "always"

它创建序列但不创建任何表。查看跟踪,它显示创建表 SQL 中的语法错误:SQL语句语法错误(例):

CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID BIGINT IDENTITY[*] NOT NULL PRIMARY KEY , VERSION BIGINT , JOB_NAME VARCHAR(100) NOT NULL, JOB_KEY VARCHAR(32) NOT NULL, CONSTRAINT JOB_INST_UN UNIQUE (JOB_NAME, JOB_KEY) ) 

事实上,检查 qith H2 控制台或 SQl linter 会将“IDENTITY[*]”标记为错误,否则它会在 H2 中工作。

第二次尝试解决方法也失败了。我把

spring:
batch:
jdbc:
initialize-schema: "never"

并按照 Spring 文档放置所有 SQL https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html#exampleDDLScripts进入 schema.sql。并且所有表和序列都已正确创建。但是,Spring Boot 的启动失败并出现错误:

Could not obtain sequence value; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Field "BATCH_JOB_SEQ.NEXTVAL" not found
Column "BATCH_JOB_SEQ.NEXTVAL" not found; SQL statement:
select BATCH_JOB_SEQ.nextval from dual [42122-204]

当然,序列没有“nextval”列,因为它是一个序列。即使是 Spring Batch 中不支持序列的数据库的解决方法序列表也没有该列。

数据库已正确配置为 H2 数据库(未尝试其他数据库)。

为什么 Spring Batch 每次都会创建错误的 SQL 语句?谁能指出正确的方向?

最佳答案

解决方案是 H2 版本。我们还将 H2 升级到 2.0,但该版本与 Spring Batch 4.3.4 不兼容。降级到 H2 版本 1.4.200 解决了这个问题。

关于Spring Batch 为 H2 在 SQL 语句中创建语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70504287/

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