Run flyway explicitly

This commit is contained in:
2026-03-11 15:54:40 -06:00
parent 29fd106e0c
commit 389b5685e3
3 changed files with 49 additions and 3 deletions

View File

@@ -1,6 +1,7 @@
package com.petshop.backend;
import org.springframework.boot.SpringApplication;
import com.petshop.backend.config.FlywayContextInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
@@ -8,6 +9,8 @@ import org.springframework.data.web.config.EnableSpringDataWebSupport;
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
public class BackendApplication {
public static void main(String[] args) {
SpringApplication.run(BackendApplication.class, args);
new SpringApplicationBuilder(BackendApplication.class)
.initializers(new FlywayContextInitializer())
.run(args);
}
}

View File

@@ -1,5 +1,6 @@
package com.petshop.backend;
import com.petshop.backend.config.FlywayContextInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.event.ContextClosedEvent;
@@ -30,7 +31,9 @@ public class DevStackApplication {
try {
controller.startDatabase();
context = new SpringApplicationBuilder(BackendApplication.class).run(args);
context = new SpringApplicationBuilder(BackendApplication.class)
.initializers(new FlywayContextInitializer())
.run(args);
ConfigurableApplicationContext appContext = context;
context.addApplicationListener(event -> {
if (event instanceof ContextClosedEvent) {

View File

@@ -0,0 +1,40 @@
package com.petshop.backend.config;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationVersion;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import java.util.Arrays;
public class FlywayContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String url = environment.getProperty("spring.datasource.url");
String username = environment.getProperty("spring.datasource.username");
String password = environment.getProperty("spring.datasource.password");
if (url == null || username == null || password == null) {
throw new IllegalStateException("Datasource properties are required before startup");
}
String[] locations = Arrays.stream(environment
.getProperty("spring.flyway.locations", "classpath:db/migration")
.split(","))
.map(String::trim)
.filter(location -> !location.isEmpty())
.toArray(String[]::new);
Flyway.configure()
.dataSource(url, username, password)
.locations(locations)
.baselineOnMigrate(environment.getProperty("spring.flyway.baseline-on-migrate", Boolean.class, false))
.baselineVersion(MigrationVersion.fromVersion(environment.getProperty("spring.flyway.baseline-version", "1")))
.load()
.migrate();
}
}