Saya menggunakan spring spring-boot-starter-batch 2.7.9 dengan mysql DB sebagai sumber data. Saya mempunyai masalah pelik, kerja kelompok dijalankan pada tempatan saya tetapi gagal untuk bermula dalam persekitaran pembangunan (kubernetes) dengan pengecualian berikut:
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.
Pekerjaan dicetuskan melalui API selebihnya, yang menyediakan dua parameter kerja: rentetan dan masa tarikh.
Contoh parameter:
{ "idType" : "ALL", "triggerTime": "2023-03-16T19:54:18.262Z" }
Satu perbezaan antara pangkalan data tempatan saya dan pangkalan data pembangunan mungkin faktor replikasi. Pangkalan data pembangunan dikonfigurasikan dengan 3 replika, sedangkan secara tempatan saya hanya mempunyai satu. Bolehkah ini menjadi punca pengecualian ini? Bagaimanakah saya boleh menyelesaikan masalah ini? TIA.
Anda perlu menyesuaikan takrifan metatable Spring Batch supaya setiap jadual mempunyai kunci utama.
Secara lalai, MySQL menerima jadual tanpa kunci utama. Tetapi dalam mana-mana persediaan menggunakan replikasi MySQL, jadual tanpa kunci utama sama ada tidak akan berfungsi sama sekali (seperti dalam situasi replikasi kumpulan anda) atau menyebabkan sakit kepala operasi di kemudian hari.
Sebab asasnya ialah seni bina DDL Spring Batch mengandungi bilangan indeks yang sangat terhad. Ini adalah disengajakan, kerana pendekatan terbaik untuk pengindeksan banyak bergantung pada kes penggunaan tertentu: https://docs.spring.io/spring-batch/docs/4.3.8/reference/html/schema-appendix .html#recommendationsForIndexingMetaDataTables