parent
668513e740
commit
509427b671
|
|
@ -210,10 +210,7 @@ public class FlywayAutoConfiguration {
|
|||
map.from(properties.isCleanDisabled()).to(configuration::cleanDisabled);
|
||||
map.from(properties.isCleanOnValidationError()).to(configuration::cleanOnValidationError);
|
||||
map.from(properties.isGroup()).to(configuration::group);
|
||||
map.from(properties.isIgnoreMissingMigrations()).to(configuration::ignoreMissingMigrations);
|
||||
map.from(properties.isIgnoreIgnoredMigrations()).to(configuration::ignoreIgnoredMigrations);
|
||||
map.from(properties.isIgnorePendingMigrations()).to(configuration::ignorePendingMigrations);
|
||||
map.from(properties.isIgnoreFutureMigrations()).to(configuration::ignoreFutureMigrations);
|
||||
configureIgnoredMigrations(configuration, properties, map);
|
||||
map.from(properties.isMixed()).to(configuration::mixed);
|
||||
map.from(properties.isOutOfOrder()).to(configuration::outOfOrder);
|
||||
map.from(properties.isSkipDefaultCallbacks()).to(configuration::skipDefaultCallbacks);
|
||||
|
|
@ -262,6 +259,18 @@ public class FlywayAutoConfiguration {
|
|||
// No method reference for compatibility with Flyway version < 7.9
|
||||
map.from(properties.getDetectEncoding())
|
||||
.to((detectEncoding) -> configuration.detectEncoding(detectEncoding));
|
||||
// No method reference for compatibility with Flyway version < 8.0
|
||||
map.from(properties.getBaselineMigrationPrefix())
|
||||
.to((baselineMigrationPrefix) -> configuration.baselineMigrationPrefix(baselineMigrationPrefix));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void configureIgnoredMigrations(FluentConfiguration configuration, FlywayProperties properties,
|
||||
PropertyMapper map) {
|
||||
map.from(properties.isIgnoreMissingMigrations()).to(configuration::ignoreMissingMigrations);
|
||||
map.from(properties.isIgnoreIgnoredMigrations()).to(configuration::ignoreIgnoredMigrations);
|
||||
map.from(properties.isIgnorePendingMigrations()).to(configuration::ignorePendingMigrations);
|
||||
map.from(properties.isIgnoreFutureMigrations()).to(configuration::ignoreFutureMigrations);
|
||||
}
|
||||
|
||||
private void configureFailOnMissingLocations(FluentConfiguration configuration,
|
||||
|
|
|
|||
|
|
@ -227,21 +227,25 @@ public class FlywayProperties {
|
|||
/**
|
||||
* Whether to ignore missing migrations when reading the schema history table.
|
||||
*/
|
||||
@Deprecated
|
||||
private boolean ignoreMissingMigrations;
|
||||
|
||||
/**
|
||||
* Whether to ignore ignored migrations when reading the schema history table.
|
||||
*/
|
||||
@Deprecated
|
||||
private boolean ignoreIgnoredMigrations;
|
||||
|
||||
/**
|
||||
* Whether to ignore pending migrations when reading the schema history table.
|
||||
*/
|
||||
@Deprecated
|
||||
private boolean ignorePendingMigrations;
|
||||
|
||||
/**
|
||||
* Whether to ignore future migrations when reading the schema history table.
|
||||
*/
|
||||
@Deprecated
|
||||
private boolean ignoreFutureMigrations = true;
|
||||
|
||||
/**
|
||||
|
|
@ -371,9 +375,9 @@ public class FlywayProperties {
|
|||
private Boolean detectEncoding;
|
||||
|
||||
/**
|
||||
* Filename prefix of state scripts. Requires Flyway Teams.
|
||||
* Filename prefix for baseline migrations. Requires Flyway Teams.
|
||||
*/
|
||||
private String stateScriptPrefix;
|
||||
private String baselineMigrationPrefix;
|
||||
|
||||
/**
|
||||
* Prefix of placeholders in migration scripts.
|
||||
|
|
@ -672,34 +676,46 @@ public class FlywayProperties {
|
|||
this.group = group;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "spring.flyway.ignore-migration-patterns")
|
||||
public boolean isIgnoreMissingMigrations() {
|
||||
return this.ignoreMissingMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIgnoreMissingMigrations(boolean ignoreMissingMigrations) {
|
||||
this.ignoreMissingMigrations = ignoreMissingMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "spring.flyway.ignore-migration-patterns")
|
||||
public boolean isIgnoreIgnoredMigrations() {
|
||||
return this.ignoreIgnoredMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIgnoreIgnoredMigrations(boolean ignoreIgnoredMigrations) {
|
||||
this.ignoreIgnoredMigrations = ignoreIgnoredMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "spring.flyway.ignore-migration-patterns")
|
||||
public boolean isIgnorePendingMigrations() {
|
||||
return this.ignorePendingMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIgnorePendingMigrations(boolean ignorePendingMigrations) {
|
||||
this.ignorePendingMigrations = ignorePendingMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "spring.flyway.ignore-migration-patterns")
|
||||
public boolean isIgnoreFutureMigrations() {
|
||||
return this.ignoreFutureMigrations;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIgnoreFutureMigrations(boolean ignoreFutureMigrations) {
|
||||
this.ignoreFutureMigrations = ignoreFutureMigrations;
|
||||
}
|
||||
|
|
@ -888,12 +904,12 @@ public class FlywayProperties {
|
|||
this.detectEncoding = detectEncoding;
|
||||
}
|
||||
|
||||
public String getStateScriptPrefix() {
|
||||
return this.stateScriptPrefix;
|
||||
public String getBaselineMigrationPrefix() {
|
||||
return this.baselineMigrationPrefix;
|
||||
}
|
||||
|
||||
public void setStateScriptPrefix(String stateScriptPrefix) {
|
||||
this.stateScriptPrefix = stateScriptPrefix;
|
||||
public void setBaselineMigrationPrefix(String baselineMigrationPrefix) {
|
||||
this.baselineMigrationPrefix = baselineMigrationPrefix;
|
||||
}
|
||||
|
||||
public String getScriptPlaceholderPrefix() {
|
||||
|
|
|
|||
|
|
@ -872,6 +872,10 @@
|
|||
"http://localhost:9200"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spring.flyway.baseline-migration-prefix",
|
||||
"defaultValue": "B"
|
||||
},
|
||||
{
|
||||
"name": "spring.flyway.connect-retries-interval",
|
||||
"defaultValue": 120
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ class Flyway5xAutoConfigurationTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isStateScript() {
|
||||
public boolean isBaselineMigration() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.flyway;
|
||||
|
||||
import org.flywaydb.core.Flyway;
|
||||
import org.flywaydb.core.api.Location;
|
||||
import org.flywaydb.core.api.callback.Callback;
|
||||
import org.flywaydb.core.api.callback.Context;
|
||||
import org.flywaydb.core.api.callback.Event;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.testsupport.classpath.ClassPathOverrides;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
/**
|
||||
* Tests for {@link FlywayAutoConfiguration} with Flyway 7.x.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@ClassPathOverrides("org.flywaydb:flyway-core:7.15.0")
|
||||
class Flyway7xAutoConfigurationTests {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class))
|
||||
.withPropertyValues("spring.datasource.generate-unique-name=true");
|
||||
|
||||
@Test
|
||||
void defaultFlyway() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> {
|
||||
assertThat(context).hasSingleBean(Flyway.class);
|
||||
Flyway flyway = context.getBean(Flyway.class);
|
||||
assertThat(flyway.getConfiguration().getLocations())
|
||||
.containsExactly(new Location("classpath:db/migration"));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void callbacksAreConfigured() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CallbackConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(Flyway.class);
|
||||
Flyway flyway = context.getBean(Flyway.class);
|
||||
Callback callbackOne = context.getBean("callbackOne", Callback.class);
|
||||
Callback callbackTwo = context.getBean("callbackTwo", Callback.class);
|
||||
assertThat(flyway.getConfiguration().getCallbacks()).hasSize(2);
|
||||
assertThat(flyway.getConfiguration().getCallbacks()).containsExactlyInAnyOrder(callbackTwo,
|
||||
callbackOne);
|
||||
verify(callbackOne, atLeastOnce()).handle(any(Event.class), any(Context.class));
|
||||
verify(callbackTwo, atLeastOnce()).handle(any(Event.class), any(Context.class));
|
||||
});
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class CallbackConfiguration {
|
||||
|
||||
@Bean
|
||||
Callback callbackOne() {
|
||||
return mockCallback();
|
||||
}
|
||||
|
||||
@Bean
|
||||
Callback callbackTwo() {
|
||||
return mockCallback();
|
||||
}
|
||||
|
||||
private Callback mockCallback() {
|
||||
Callback callback = mock(Callback.class);
|
||||
given(callback.supports(any(Event.class), any(Context.class))).willReturn(true);
|
||||
given(callback.getCallbackName()).willReturn("callback");
|
||||
return callback;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -499,8 +499,9 @@ class FlywayAutoConfigurationTests {
|
|||
assertThat(context).hasSingleBean(Flyway.class);
|
||||
Flyway flyway = context.getBean(Flyway.class);
|
||||
assertThat(flyway.getConfiguration().getConnectRetries()).isEqualTo(5);
|
||||
assertThat(flyway.getConfiguration().isIgnoreMissingMigrations()).isTrue();
|
||||
assertThat(flyway.getConfiguration().isIgnorePendingMigrations()).isTrue();
|
||||
assertThat(flyway.getConfiguration().getBaselineDescription()).isEqualTo("<< Custom baseline >>");
|
||||
assertThat(flyway.getConfiguration().getBaselineVersion())
|
||||
.isEqualTo(MigrationVersion.fromVersion("1"));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -657,6 +658,13 @@ class FlywayAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void baselineMigrationPrefixIsCorrectlyMapped() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.flyway.baseline-migration-prefix=BL")
|
||||
.run(validateFlywayTeamsPropertyOnly("baselineMigrationPrefix"));
|
||||
}
|
||||
|
||||
private ContextConsumer<AssertableApplicationContext> validateFlywayTeamsPropertyOnly(String propertyName) {
|
||||
return (context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
|
|
@ -892,13 +900,13 @@ class FlywayAutoConfigurationTests {
|
|||
@Bean
|
||||
@Order(1)
|
||||
FlywayConfigurationCustomizer customizerOne() {
|
||||
return (configuration) -> configuration.connectRetries(5).ignorePendingMigrations(true);
|
||||
return (configuration) -> configuration.connectRetries(5).baselineVersion("1");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(0)
|
||||
FlywayConfigurationCustomizer customizerTwo() {
|
||||
return (configuration) -> configuration.connectRetries(10).ignoreMissingMigrations(true);
|
||||
return (configuration) -> configuration.connectRetries(10).baselineDescription("<< Custom baseline >>");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1008,7 +1016,7 @@ class FlywayAutoConfigurationTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isStateScript() {
|
||||
public boolean isBaselineMigration() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,11 +44,12 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
*/
|
||||
class FlywayPropertiesTests {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
void defaultValuesAreConsistent() {
|
||||
FlywayProperties properties = new FlywayProperties();
|
||||
Configuration configuration = new FluentConfiguration();
|
||||
assertThat(configuration.getFailOnMissingLocations()).isEqualTo(properties.isFailOnMissingLocations());
|
||||
assertThat(configuration.isFailOnMissingLocations()).isEqualTo(properties.isFailOnMissingLocations());
|
||||
assertThat(properties.getLocations().stream().map(Location::new).toArray(Location[]::new))
|
||||
.isEqualTo(configuration.getLocations());
|
||||
assertThat(properties.getEncoding()).isEqualTo(configuration.getEncoding());
|
||||
|
|
@ -61,7 +62,7 @@ class FlywayPropertiesTests {
|
|||
assertThat(configuration.getLockRetryCount()).isEqualTo(50);
|
||||
assertThat(properties.getDefaultSchema()).isEqualTo(configuration.getDefaultSchema());
|
||||
assertThat(properties.getSchemas()).isEqualTo(Arrays.asList(configuration.getSchemas()));
|
||||
assertThat(properties.isCreateSchemas()).isEqualTo(configuration.getCreateSchemas());
|
||||
assertThat(properties.isCreateSchemas()).isEqualTo(configuration.isCreateSchemas());
|
||||
assertThat(properties.getTable()).isEqualTo(configuration.getTable());
|
||||
assertThat(properties.getBaselineDescription()).isEqualTo(configuration.getBaselineDescription());
|
||||
assertThat(MigrationVersion.fromVersion(properties.getBaselineVersion()))
|
||||
|
|
@ -113,7 +114,8 @@ class FlywayPropertiesTests {
|
|||
ignoreProperties(configuration, "callbacks", "classLoader", "dataSource", "javaMigrations",
|
||||
"javaMigrationClassProvider", "resourceProvider", "resolvers");
|
||||
// Properties we don't want to expose
|
||||
ignoreProperties(configuration, "resolversAsClassNames", "callbacksAsClassNames", "apiExtensions", "loggers");
|
||||
ignoreProperties(configuration, "resolversAsClassNames", "callbacksAsClassNames", "apiExtensions", "loggers",
|
||||
"driver");
|
||||
// Handled by the conversion service
|
||||
ignoreProperties(configuration, "baselineVersionAsString", "encodingAsString", "locationsAsStrings",
|
||||
"targetAsString");
|
||||
|
|
|
|||
|
|
@ -309,7 +309,7 @@ bom {
|
|||
]
|
||||
}
|
||||
}
|
||||
library("Flyway", "7.15.0") {
|
||||
library("Flyway", "8.0.0") {
|
||||
group("org.flywaydb") {
|
||||
modules = [
|
||||
"flyway-core"
|
||||
|
|
|
|||
Loading…
Reference in New Issue