4
respuestas

[Bug] no compila el codigo

Ya aplique todo lo que decía en la siguiente página para solucionar este error, pero todavía nada funciona.

2023-09-05T20:06:29.366-05:00  WARN 22360 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: 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
Detected failed migration to version 2 (alter-table-medicos-add-telefono).
Please remove any half-completed changes then run repair to fix the schema history.
Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE
2023-09-05T20:06:29.378-05:00  INFO 22360 --- [  restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-09-05T20:06:29.392-05:00 ERROR 22360 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

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
Detected failed migration to version 2 (alter-table-medicos-add-telefono).
Please remove any half-completed changes then run repair to fix the schema history.
Need more flexibility with validation rules? Learn more: https://rd.gt/3AbJUZE
4 respuestas

Hola Mario,

Parece que el problema está relacionado con la migración de Flyway que intentaste realizar. El error indica que la migración a la versión 2 (alter-table-medicos-add-telefono) ha fallado.

Flyway es muy estricto con las migraciones y si una migración falla, todas las migraciones posteriores también fallarán hasta que se resuelva el problema. En tu caso, parece que la migración a la versión 2 ha fallado, por lo que Flyway no permitirá que se realicen más migraciones hasta que se resuelva este problema.

Para solucionar este problema, intenta seguir estos pasos:

  1. Primero, debes eliminar cualquier cambio a medio hacer que se haya producido como resultado de la migración fallida. Esto puede implicar eliminar manualmente cualquier cambio en la base de datos que se haya producido como resultado de la migración fallida.

  2. A continuación, debes ejecutar el comando 'repair' de Flyway. Este comando corregirá el historial de esquemas de Flyway al marcar la migración fallida como resuelta. En Spring Boot, puedes hacer esto a través de la línea de comandos con ./mvnw spring-boot:run -Dspring-boot.run.arguments=--spring.flyway.repair.

  3. Finalmente, debes volver a ejecutar la migración. Asegúrate de que el script de migración esté correcto y no cause errores. En tu caso, el script de migración sería el archivo V2__alter-table-medicos-add-telefono.sql.

Un ejemplo de cómo podría ser tu script de migración es:

ALTER TABLE medicos
ADD telefono VARCHAR(255);

Por favor, asegúrate de que este script se ajusta a tu esquema de base de datos.

Espero que estos pasos te ayuden a resolver el problema. Si el problema persiste, puede ser útil compartir el contenido de tu script de migración para poder ayudarte de manera más efectiva.

Espero haber ayudado y ¡buenos estudios! Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Gracias ya lo pude solucionar

Me pasó lo mismo por andar experimentando con flyway, lo que me ayudó a mi fue crear una nueva clase para ejecutar el "flyway repair"

package med.voll.api;

import org.flywaydb.core.Flyway;

public class flywayRepair {
    public static void main(String[] args) {
        // Configura la instancia de Flyway con la configuración de tu base de datos, usuario y contraseña
        Flyway flyway = Flyway.configure()
                .dataSource("jdbc:mysql://localhost:3306/tu_base_de_datos", "tu_usuario", "tu_contraseña")
                .load();

        // Ejecuta la reparación de Flyway
        flyway.repair();

    }
}

Espero les funcione, saludos.

gracias y excelente aporte,