首頁  >  問答  >  主體

Spring批次作業未在開發環境中啟動

我使用 spring spring-boot-starter-batch 2.7.9 並以 mysql DB 作為資料來源。我有一個奇怪的問題,批次作業在我的本地運行,但無法在開發環境(kubernetes)中啟動,異常如下:

Exception while starting job
    org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT into BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, KEY_NAME, TYPE_CD, STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL, IDENTIFYING) values (?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [3098]; The table does not comply with the requirements by an external plugin.; nested exception is java.sql.SQLException: The table does not comply with the requirements by an external plugin.

作業透過休息端 API 觸發,該 API 提供兩個作業參數:字串和日期時間。

範例參數:

{
    "idType" : "ALL",
    "triggerTime": "2023-03-16T19:54:18.262Z" 
}

我的本地資料庫和開發資料庫之間的一個區別可能是複製因子。開發資料庫配置了 3 個副本,而在本地我只有一個。這可能是這個異常的原因嗎?我該如何解決這個問題? TIA。

P粉517814372P粉517814372410 天前539

全部回覆(1)我來回復

  • P粉166675898

    P粉1666758982023-09-07 00:26:00

    您需要自訂 Spring Batch 元表的定義,以便每個表都有一個主鍵。

    預設情況下,MySQL 接受沒有主鍵的表。但在任何使用 MySQL 複製的設定中,沒有主鍵的表要么根本不起作用(如您的群組複製情況),要么會導致日後的操作難題。

    根本原因是 Spring Batch 架構的 DDL 包含的索引數量非常有限。這是故意的,因為索引的最佳方法在很大程度上取決於特定的用例: https://docs.spring.io/spring-batch/docs/4.3.8/reference/html/schema -appendix.html#recommendationsForIndexingMetaDataTables

    #

    回覆
    0
  • 取消回覆