J'utilise spring spring-boot-starter-batch 2.7.9 avec mysql DB comme source de données. J'ai un problème étrange, le travail batch s'exécute sur mon local mais ne parvient pas à démarrer dans l'environnement de développement (kubernetes) à l'exception suivante :
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.
Les tâches sont déclenchées via l'API rest, qui fournit deux paramètres de tâche : chaîne et date/heure.
Exemples de paramètres :
{ "idType" : "ALL", "triggerTime": "2023-03-16T19:54:18.262Z" }
Une différence entre ma base de données locale et ma base de données de développement pourrait être le facteur de réplication. La base de développement est configurée avec 3 réplicas, alors qu'en local je n'en ai qu'un. Est-ce que cela pourrait être la cause de cette exception ? Comment puis-je résoudre ce problème? TIA.
Vous devez personnaliser la définition des métatables Spring Batch afin que chaque table ait une clé primaire.
Par défaut, MySQL accepte les tables sans clés primaires. Mais dans toute configuration utilisant la réplication MySQL, une table sans clé primaire ne fonctionnera pas du tout (comme dans votre situation de réplication de groupe) ou provoquera des problèmes opérationnels plus tard.
La raison fondamentale est que l'architecture DDL de Spring Batch contient un nombre très limité d'index. Ceci est intentionnel, car la meilleure approche d'indexation dépend fortement du cas d'utilisation spécifique : https://docs.spring.io/spring-batch/docs/4.3.8/reference/html/schema-appendix .html#recommendationsForIndexingMetaDataTables