Run flyway explicitly
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user