es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Batch crea errores de sintaxis en las declaraciones SQL para H2.

Realicé una actualización de Spring Boot & Batch de la versión 1.5.9 a Spring Boot & Batch 2.5.6. Ahora tengo un problema con la inicialización del esquema de Spring Batch. Estoy ejecutando H2 en una clase de prueba de JUnit5. El primer intento es inicializar mediante Spring Batch con:

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

Crea las secuencias pero no crea ninguna tabla. Al revisar el rastro, muestra un error de sintaxis en la creación de la tabla 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) ) 

De hecho, al revisar con la consola de H2 o con un linterna de SQL, marca “IDENTITY” como un error y sin eso funcionaría en H2.

El segundo intento como solución alternativa también falla. Puse:

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

y coloqué todo el SQL según la documentación de Spring en el archivo schema.sql. Y todas las tablas y secuencias se crean correctamente. Sin embargo, el inicio de Spring Boot falla con el siguiente error:

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]

Por supuesto, la secuencia no tiene una columna llamada “nextval”, ya que es una secuencia. Incluso las tablas de secuencia de solución alternativa en Spring Batch para bases de datos sin soporte para secuencias no tienen esa columna.

La base de datos está configurada correctamente como una base de datos H2 (no probé con otra base de datos). ¿Por qué Spring Batch siempre crea declaraciones SQL incorrectas? ¿Alguien puede indicar la dirección correcta?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay algunos problemas de compatibilidad con la actualización de Spring Boot & Batch 1.5.9 a Spring Boot & Batch 2.5.6, específicamente con la inicialización del esquema de Spring Batch.

    El primer intento de inicializar el esquema a través de Spring Batch no está creando tablas, solo secuencias debido a un error de sintaxis en la declaración SQL de creación de tabla. Específicamente, parece que hay un problema con la palabra clave “IDENTITY” que H2 marca como un error.

    El segundo intento como solución alternativa también falla, ya que Spring Boot no se inicia con un error relacionado con la obtención de valores de secuencia. Parece que el problema puede estar relacionado con H2 interpretando “BATCH_JOB_SEQ.NEXTVAL” como una columna en lugar de una secuencia.

    No está claro por qué Spring Batch está creando estas declaraciones SQL incorrectas, pero puede ser útil verificar si hay cambios en la sintaxis o configuraciones entre las dos versiones de Spring Boot & Batch. Además, puede ser útil revisar la documentación de H2 en busca de problemas relacionados con secuencias y creación de tablas.

    En general, puede ser necesario realizar una investigación adicional y solucionar problemas para identificar y resolver el problema.

Comments are closed.