Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

He tenido problema con las migraciones, me sale el siguiente error.

el archivo V1__create-table-medicos.sql

create table medicos(
    id bigint not null auto_increment,
    nombre varchar(100) not null,
    email varchar(100) not null unique,
    documento varchar(12) not null unique,
    especialidad varchar(100) not null,
    calle varchar(100) not null,
    barrio varchar(100) not null,
    codigo_postal varchar(12) not null,
    complemento varchar(100),
    numero varchar(20),
    estado char(100) not null,
    ciudad varchar(100) not null,
    primary key(id)
);

en el archivo : V2__alter_table-medicos-add-columns-telefono.sql

alter table medicos add telefono varchar(20) not null;

El archivo histórico de flyway tiene solo un registro con el V1__ las dependencias, las tengo asi: con el parametro success=1, el V2___ no lo graba, en este historico y sale el error.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-mysql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

El error es:

 :: Spring Boot ::                (v3.5.3)

2025-07-01T08:53:56.210-05:00  INFO 784 --- [api] [  restartedMain] med.voll.api.ApiApplication              : Starting ApiApplication using Java 17.0.12 with PID 784 (E:\JavaProjects\23-api-rest-voll-med-alura\target\classes started by ReneAvilaAlonso in E:\JavaProjects\23-api-rest-voll-med-alura)
2025-07-01T08:53:56.226-05:00  INFO 784 --- [api] [  restartedMain] med.voll.api.ApiApplication              : No active profile set, falling back to 1 default profile: "default"

ver siguiente aparte de continuación del error.

3 respuestas

continuación del error.

 :: Spring Boot ::                (v3.5.3)
2025-07-01T08:53:56.502-05:00  INFO 784 --- [api] [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2025-07-01T08:53:56.502-05:00  INFO 784 --- [api] [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2025-07-01T08:54:00.299-05:00  INFO 784 --- [api] [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-07-01T08:54:00.487-05:00  INFO 784 --- [api] [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 159 ms. Found 1 JPA repository interface.
2025-07-01T08:54:02.706-05:00  INFO 784 --- [api] [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-07-01T08:54:02.737-05:00  INFO 784 --- [api] [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-07-01T08:54:02.737-05:00  INFO 784 --- [api] [  restartedMain] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.42]
2025-07-01T08:54:02.909-05:00  INFO 784 --- [api] [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-07-01T08:54:02.909-05:00  INFO 784 --- [api] [  restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 6407 ms
2025-07-01T08:54:03.812-05:00  INFO 784 --- [api] [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2025-07-01T08:54:05.554-05:00  INFO 784 --- [api] [  restartedMain] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6b12dc01
2025-07-01T08:54:05.570-05:00  INFO 784 --- [api] [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2025-07-01T08:54:05.773-05:00  INFO 784 --- [api] [  restartedMain] org.flywaydb.core.FlywayExecutor         : Database: jdbc:mysql://localhost/vollmed_api (MySQL 8.0)
2025-07-01T08:54:06.168-05:00  WARN 784 --- [api] [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Failed to initialize dependency 'flywayInitializer' of LoadTimeWeaverAware bean 'entityManagerFactory': Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Validate failed: Migrations have failed validation
Migration checksum mismatch for migration version 1
-> Applied to database : -1550619886
-> Resolved locally    : 1744666221
Either revert the changes to the migration, or run repair to update the schema history.
Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE
2025-07-01T08:54:06.168-05:00  INFO 784 --- [api] [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2025-07-01T08:54:06.249-05:00  INFO 784 --- [api] [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2025-07-01T08:54:06.264-05:00  INFO 784 --- [api] [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2025-07-01T08:54:06.311-05:00  INFO 784 --- [api] [  restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-07-01T08:54:06.374-05:00 ERROR 784 --- [api] [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Failed to initialize dependency 'flywayInitializer' of LoadTimeWeaverAware bean 'entityManagerFactory': Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Validate failed: Migrations have failed validation
Migration checksum mismatch for migration version 1
-> Applied to database : -1550619886
-> Resolved locally    : 1744666221

continuacion del mismo error.

Either revert the changes to the migration, or run repair to update the schema history.
Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:328) ~[spring-beans-6.2.8.jar:6.2.8]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-6.2.8.jar:6.2.8]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970) ~[spring-context-6.2.8.jar:6.2.8]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) ~[spring-context-6.2.8.jar:6.2.8]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.5.3.jar:3.5.3]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.5.3.jar:3.5.3]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.5.3.jar:3.5.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.5.3.jar:3.5.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.5.3.jar:3.5.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.5.3.jar:3.5.3]
    at med.voll.api.ApiApplication.main(ApiApplication.java:11) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.5.3.jar:3.5.3]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Validate failed: Migrations have failed validation
Migration checksum mismatch for migration version 1
-> Applied to database : -1550619886
-> Resolved locally    : 1744666221
Either revert the changes to the migration, or run repair to update the schema history.
Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE

Que he hecho.

  1. Ejecutar los scripts de sql, desde mysql. Para poder continuar con el curso.
  2. estuve mirando esta linea. Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE
  3. he revisado las actualizaciones de Intellij idea(2024.3.6), de MySql Workbench(8.0.42), segun recomendaciones en el video, por parte de ustedes
  4. Encontre en alguna documentacion sobre parametrizar en properties. Esto de flayway:
# Configuración de Flyway
spring.flyway.enabled=true # Asegúrate de que Flyway esté habilitado
spring.flyway.url=jdbc:mysql://localhost:3306/tu_base_de_datos # Reemplaza con la URL de tu base de datos
spring.flyway.user=tu_usuario # Reemplaza con tu usuario de base de datos
spring.flyway.password=tu_contraseña # Reemplaza con tu contraseña de base de datos
spring.flyway.locations=classpath:db/migration # Ubicación de tus archivos de migración

Esto se necesita, en properties, ya que solo tengo:

spring.application.name=api
spring.datasource.url=jdbc:mysql://localhost/vollmed_api
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=1224
  1. Los codigos de validacion estan super revisados, que estan en las clases. Que pena lo extenso, que se ha enviado... atte Rene Avila.

Hola Rene, espero que estés bien

**Antes de todo **

Este mensaje de error indica que la versión 1 de la migración Flyway fue modificada después de haber sido aplicada en la base de datos. Flyway calcula un checksum (hash) de cada archivo de migración SQL y guarda ese valor en el historial de migraciones (flyway_schema_history) de la base de datos. Si el contenido del archivo cambia después de aplicarlo, el checksum cambia y Flyway detecta esta inconsistencia.

Posibles soluciones

Opción 1: Restaurar el archivo a su versión original (recomendado en entornos productivos) Si no deseas alterar el historial de la base (por seguridad o por políticas del equipo):

Recupera el contenido original del archivo V1__...sql (por ejemplo, desde el control de versiones como Git).

Restaura el archivo con ese contenido original.

Ejecuta flyway migrate nuevamente → el error debería desaparecer.

Opción 2: Ejecutar flyway repair (acepta que el cambio fue intencional)

Si el cambio fue intencional y tienes control sobre la base de datos (por ejemplo, en un entorno de desarrollo):

Ejecuta: flyway repair

Esto actualizará el checksum en la base con el nuevo valor del archivo local.

Después de eso, las validaciones de integridad pasarán sin problemas.

Opciones extras

  1. Verifica el nombre del archivo de migración: Asegúrate de que el nombre del archivo de la migración V2 sea exactamente V2__alter_table_medicos_add_columns_telefono.sql. Flyway es muy estricto con los nombres de los archivos y cualquier discrepancia puede causar que la migración no se aplique.

  2. Chequea el directorio de migración: Asegúrate de que ambos archivos de migración (V1 y V2) estén ubicados en el mismo directorio de migración que Flyway está configurado para escanear. Por defecto, debería ser src/main/resources/db/migration.

  3. Revisa el archivo de propiedades: Verifica que tu archivo application.properties o application.yml tenga configuraciones adecuadas para Flyway y que esté apuntando a la base de datos correcta.

  4. Revisa el estado de la base de datos: Puedes ejecutar un comando SQL para verificar el estado actual de las migraciones en tu base de datos. Por ejemplo, SELECT * FROM flyway_schema_history; te mostrará qué migraciones se han aplicado.

  5. Verifica el log de Flyway: Al iniciar tu aplicación, Flyway debería registrar información sobre las migraciones que está aplicando. Revisa los logs para ver si hay algún mensaje de error o advertencia relacionado con la migración V2.

  6. Reinicia tu aplicación: A veces, simplemente reiniciar la aplicación puede resolver problemas con las migraciones si hay algún problema temporal.

Espero que estas sugerencias te sean útiles para resolver el problema. ¡Espero haber ayudado y buenos estudios!