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



我从Spring Boot&批量从1.5.9到Spring Boot&批次2.5.6。现在我有一个关于SpringBatch模式初始化的问题。我正在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过梁,其标记为";身份[*]";作为误差,否则它将在H2中工作。

第二次尝试,因为变通方法也失败了。我放了

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

并根据Spring文档放置所有SQLhttps://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]

当然,该序列没有列"0";nextval";,因为它是一个序列。即使是Spring Batch中不支持序列的数据库的变通序列表也没有该列。

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

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

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

MODE=LEGACY将使用Spring boot 2.6.x解决H2 2.x上的问题。(nextval支持将重新启用(

查看详细信息:https://github.com/spring-projects/spring-boot/issues/29034#issuecomment-1002641782

最新更新