Run flyway explicitly
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.petshop.backend;
|
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.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.data.web.config.EnableSpringDataWebSupport;
|
import org.springframework.data.web.config.EnableSpringDataWebSupport;
|
||||||
|
|
||||||
@@ -8,6 +9,8 @@ import org.springframework.data.web.config.EnableSpringDataWebSupport;
|
|||||||
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
|
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
|
||||||
public class BackendApplication {
|
public class BackendApplication {
|
||||||
public static void main(String[] args) {
|
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;
|
package com.petshop.backend;
|
||||||
|
|
||||||
|
import com.petshop.backend.config.FlywayContextInitializer;
|
||||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.context.event.ContextClosedEvent;
|
import org.springframework.context.event.ContextClosedEvent;
|
||||||
@@ -30,7 +31,9 @@ public class DevStackApplication {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
controller.startDatabase();
|
controller.startDatabase();
|
||||||
context = new SpringApplicationBuilder(BackendApplication.class).run(args);
|
context = new SpringApplicationBuilder(BackendApplication.class)
|
||||||
|
.initializers(new FlywayContextInitializer())
|
||||||
|
.run(args);
|
||||||
ConfigurableApplicationContext appContext = context;
|
ConfigurableApplicationContext appContext = context;
|
||||||
context.addApplicationListener(event -> {
|
context.addApplicationListener(event -> {
|
||||||
if (event instanceof ContextClosedEvent) {
|
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