Use Flyway to bind flyway.*
Since Flyway has bean properties (with getters and setters) it can be used to bin directly to the Environment (instead of copying all the properties into FlywayProperties). Fixes gh-806
This commit is contained in:
parent
89e0b3d552
commit
e118515d7a
|
|
@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
@ -80,16 +81,11 @@ public class FlywayAutoConfiguration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean(initMethod = "migrate")
|
||||||
|
@ConfigurationProperties(prefix = "flyway")
|
||||||
public Flyway flyway(DataSource dataSource) {
|
public Flyway flyway(DataSource dataSource) {
|
||||||
Flyway flyway = new Flyway();
|
Flyway flyway = new Flyway();
|
||||||
flyway.setLocations(this.properties.getLocations().toArray(new String[0]));
|
|
||||||
flyway.setSchemas(this.properties.getSchemas().toArray(new String[0]));
|
|
||||||
flyway.setInitVersion(this.properties.getInitVersion());
|
|
||||||
flyway.setSqlMigrationPrefix(this.properties.getPrefix());
|
|
||||||
flyway.setSqlMigrationSuffix(this.properties.getSuffix());
|
|
||||||
flyway.setDataSource(dataSource);
|
flyway.setDataSource(dataSource);
|
||||||
flyway.migrate();
|
|
||||||
return flyway;
|
return flyway;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,60 +16,31 @@
|
||||||
|
|
||||||
package org.springframework.boot.autoconfigure.flyway;
|
package org.springframework.boot.autoconfigure.flyway;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.flywaydb.core.Flyway;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration properties for Flyway database migrations.
|
* Configuration properties for Flyway database migrations. These are only the properties
|
||||||
|
* that Spring needs to validate and enable the migrations. If you want to control the
|
||||||
|
* location or format of the scripts you can use the same prefix ("flyway") to inject
|
||||||
|
* properties into the {@link Flyway} instance.
|
||||||
*
|
*
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
*
|
*
|
||||||
* @since 1.1.0
|
* @since 1.1.0
|
||||||
*/
|
*/
|
||||||
@ConfigurationProperties(prefix = "flyway", ignoreUnknownFields = false)
|
@ConfigurationProperties(prefix = "flyway", ignoreUnknownFields = true)
|
||||||
public class FlywayProperties {
|
public class FlywayProperties {
|
||||||
|
|
||||||
private List<String> locations = Arrays.asList("db/migrations");
|
private List<String> locations = Arrays.asList("db/migration");
|
||||||
|
|
||||||
private List<String> schemas = new ArrayList<String>();
|
|
||||||
|
|
||||||
private String prefix = "V";
|
|
||||||
|
|
||||||
private String suffix = ".sql";
|
|
||||||
|
|
||||||
private String initVersion = "1";
|
|
||||||
|
|
||||||
private boolean checkLocation = false;
|
private boolean checkLocation = false;
|
||||||
|
|
||||||
private boolean enabled = true;
|
private boolean enabled = true;
|
||||||
|
|
||||||
public String getPrefix() {
|
|
||||||
return this.prefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrefix(String prefix) {
|
|
||||||
this.prefix = prefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSuffix() {
|
|
||||||
return this.suffix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSuffix(String suffix) {
|
|
||||||
this.suffix = suffix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getInitVersion() {
|
|
||||||
return this.initVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInitVersion(String initVersion) {
|
|
||||||
this.initVersion = initVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocations(List<String> locations) {
|
public void setLocations(List<String> locations) {
|
||||||
this.locations = locations;
|
this.locations = locations;
|
||||||
}
|
}
|
||||||
|
|
@ -78,14 +49,6 @@ public class FlywayProperties {
|
||||||
return this.locations;
|
return this.locations;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getSchemas() {
|
|
||||||
return this.schemas;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSchemas(List<String> schemas) {
|
|
||||||
this.schemas = schemas;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCheckLocation(boolean checkLocation) {
|
public void setCheckLocation(boolean checkLocation) {
|
||||||
this.checkLocation = checkLocation;
|
this.checkLocation = checkLocation;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,22 +74,22 @@ public class FlywayAutoConfigurationTests {
|
||||||
PropertyPlaceholderAutoConfiguration.class);
|
PropertyPlaceholderAutoConfiguration.class);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
Flyway flyway = this.context.getBean(Flyway.class);
|
Flyway flyway = this.context.getBean(Flyway.class);
|
||||||
assertEquals("[classpath:db/migrations]", Arrays.asList(flyway.getLocations())
|
assertEquals("[classpath:db/migration]", Arrays.asList(flyway.getLocations())
|
||||||
.toString());
|
.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOverrideLocations() throws Exception {
|
public void testOverrideLocations() throws Exception {
|
||||||
EnvironmentTestUtils.addEnvironment(this.context,
|
EnvironmentTestUtils.addEnvironment(this.context,
|
||||||
"flyway.locations:classpath:db/changelog");
|
"flyway.locations:classpath:db/changelog,classpath:db/migration");
|
||||||
this.context
|
this.context
|
||||||
.register(EmbeddedDataSourceConfiguration.class,
|
.register(EmbeddedDataSourceConfiguration.class,
|
||||||
FlywayAutoConfiguration.class,
|
FlywayAutoConfiguration.class,
|
||||||
PropertyPlaceholderAutoConfiguration.class);
|
PropertyPlaceholderAutoConfiguration.class);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
Flyway flyway = this.context.getBean(Flyway.class);
|
Flyway flyway = this.context.getBean(Flyway.class);
|
||||||
assertEquals("[classpath:db/changelog]", Arrays.asList(flyway.getLocations())
|
assertEquals("[classpath:db/changelog, classpath:db/migration]",
|
||||||
.toString());
|
Arrays.asList(flyway.getLocations()).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -1207,10 +1207,12 @@ To automatically run Flyway database migrations on startup, add the
|
||||||
|
|
||||||
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with
|
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with
|
||||||
`<VERSION>` an underscore-separated version, e.g. "1" or "2_1"). By
|
`<VERSION>` an underscore-separated version, e.g. "1" or "2_1"). By
|
||||||
default they live in a folder `classpath:db/migrations` but you can
|
default they live in a folder `classpath:db/migration` but you can
|
||||||
modify that using `flyway.locations` (a list). See
|
modify that using `flyway.locations` (a list). See the Flyway class from
|
||||||
|
flyway-core for details of available settings like schemas etc. In
|
||||||
|
addition Spring Boot provides a small set of properties in
|
||||||
{sc-spring-boot-autoconfigure}/flyway/FlywayProperties.{sc-ext}[`FlywayProperties`]
|
{sc-spring-boot-autoconfigure}/flyway/FlywayProperties.{sc-ext}[`FlywayProperties`]
|
||||||
for details of available settings like schemas etc.
|
that can be used to disable the migrations, or switch off the location checking.
|
||||||
|
|
||||||
There is a {github-code}/spring-boot-samples/spring-boot-sample-flyway[Flyway sample] so
|
There is a {github-code}/spring-boot-samples/spring-boot-sample-flyway[Flyway sample] so
|
||||||
you can see how to set things up.
|
you can see how to set things up.
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1 @@
|
||||||
spring.jpa.generate-ddl: false
|
|
||||||
spring.jpa.hibernate.ddl-auto: validate
|
spring.jpa.hibernate.ddl-auto: validate
|
||||||
Loading…
Reference in New Issue