From a60905674f59ad4d28fe6dee9f994f68aba1ad19 Mon Sep 17 00:00:00 2001 From: Marcel Date: Wed, 18 Mar 2026 20:34:41 +0100 Subject: [PATCH] fix(backend): explicit Flyway bean to bypass broken auto-configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spring Boot 4.0 Flyway auto-configuration is not triggering in the CI environment — confirmed by empty DB and no flyway_schema_history table. Replace YAML-based auto-config with an explicit @Bean that creates and runs Flyway directly on startup, independent of any auto-configuration conditions. Disable the auto-config via spring.flyway.enabled=false to prevent interference. Add @DependsOn("flyway") to DataInitializer to enforce that CommandLineRunner beans are only registered after migrations. Co-Authored-By: Claude Sonnet 4.6 --- .../config/DataInitializer.java | 2 ++ .../familienarchiv/config/FlywayConfig.java | 29 +++++++++++++++++++ backend/src/main/resources/application.yaml | 6 +--- 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 backend/src/main/java/org/raddatz/familienarchiv/config/FlywayConfig.java diff --git a/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java b/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java index 262c4bf1..18571eb3 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java @@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.raddatz.familienarchiv.model.AppUser; +import org.springframework.context.annotation.DependsOn; import org.raddatz.familienarchiv.model.Document; import org.raddatz.familienarchiv.model.DocumentStatus; import org.raddatz.familienarchiv.model.Person; @@ -27,6 +28,7 @@ import java.util.Set; @Configuration @RequiredArgsConstructor @Slf4j +@DependsOn("flyway") public class DataInitializer { @Value("${app.admin.username:admin}") diff --git a/backend/src/main/java/org/raddatz/familienarchiv/config/FlywayConfig.java b/backend/src/main/java/org/raddatz/familienarchiv/config/FlywayConfig.java new file mode 100644 index 00000000..2f3ba6b4 --- /dev/null +++ b/backend/src/main/java/org/raddatz/familienarchiv/config/FlywayConfig.java @@ -0,0 +1,29 @@ +package org.raddatz.familienarchiv.config; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.flywaydb.core.Flyway; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +@Configuration +@RequiredArgsConstructor +@Slf4j +public class FlywayConfig { + + private final DataSource dataSource; + + @Bean(name = "flyway") + public Flyway flyway() { + log.info("Running Flyway migrations..."); + Flyway flyway = Flyway.configure() + .dataSource(dataSource) + .locations("classpath:db/migration") + .load(); + var result = flyway.migrate(); + log.info("Flyway: {} migration(s) applied.", result.migrationsExecuted); + return flyway; + } +} diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index 19f6daef..5839b767 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -9,11 +9,7 @@ spring: driver-class-name: org.postgresql.Driver flyway: - enabled: true - locations: classpath:db/migration - url: ${SPRING_DATASOURCE_URL} - user: ${SPRING_DATASOURCE_USERNAME} - password: ${SPRING_DATASOURCE_PASSWORD} + enabled: false # Managed explicitly via FlywayConfig bean jpa: hibernate: