我將 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 檔案 https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html#exampleDDLScripts將所有 SQL 放入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 陳述句?誰能指出正確的方向?
uj5u.com熱心網友回復:
解決方案是 H2 版本。我們還將 H2 升級到 2.0,但該版本與 Spring Batch 4.3.4 不兼容。降級到 H2 版本 1.4.200 解決了這個問題。
uj5u.com熱心網友回復:
MODE=LEGACY將使用 Spring boot 2.6.x 解決 H2 2.x 上的問題。(nextval將重新啟用支持)
詳見:https ://github.com/spring-projects/spring-boot/issues/29034#issuecomment-1002641782
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410653.html
標籤:
上一篇:如何修復無法延遲初始化集合
