parent
d952a8f3a5
commit
847aecf621
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* 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.
|
||||
|
|
@ -62,7 +62,13 @@ public class FlywayMigrationInitializer implements InitializingBean, Ordered {
|
|||
this.migrationStrategy.migrate(this.flyway);
|
||||
}
|
||||
else {
|
||||
this.flyway.migrate();
|
||||
try {
|
||||
this.flyway.migrate();
|
||||
}
|
||||
catch (NoSuchMethodError ex) {
|
||||
// Flyway < 7.0
|
||||
this.flyway.getClass().getMethod("migrate").invoke(this.flyway);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -248,48 +248,45 @@ public class FlywayProperties {
|
|||
private boolean validateOnMigrate = true;
|
||||
|
||||
/**
|
||||
* Whether to batch SQL statements when executing them. Requires Flyway Pro or Flyway
|
||||
* Enterprise.
|
||||
* Whether to batch SQL statements when executing them. Requires Flyway Teams.
|
||||
*/
|
||||
private Boolean batch;
|
||||
|
||||
/**
|
||||
* File to which the SQL statements of a migration dry run should be output. Requires
|
||||
* Flyway Pro or Flyway Enterprise.
|
||||
* Flyway Teams.
|
||||
*/
|
||||
private File dryRunOutput;
|
||||
|
||||
/**
|
||||
* Rules for the built-in error handling to override specific SQL states and error
|
||||
* codes. Requires Flyway Pro or Flyway Enterprise.
|
||||
* codes. Requires Flyway Teams.
|
||||
*/
|
||||
private String[] errorOverrides;
|
||||
|
||||
/**
|
||||
* Licence key for Flyway Pro or Flyway Enterprise.
|
||||
* Licence key for Flyway Teams.
|
||||
*/
|
||||
private String licenseKey;
|
||||
|
||||
/**
|
||||
* Whether to enable support for Oracle SQL*Plus commands. Requires Flyway Pro or
|
||||
* Flyway Enterprise.
|
||||
* Whether to enable support for Oracle SQL*Plus commands. Requires Flyway Teams.
|
||||
*/
|
||||
private Boolean oracleSqlplus;
|
||||
|
||||
/**
|
||||
* Whether to issue a warning rather than an error when a not-yet-supported Oracle
|
||||
* SQL*Plus statement is encountered. Requires Flyway Pro or Flyway Enterprise.
|
||||
* SQL*Plus statement is encountered. Requires Flyway Teams.
|
||||
*/
|
||||
private Boolean oracleSqlplusWarn;
|
||||
|
||||
/**
|
||||
* Whether to stream SQL migrations when executing them. Requires Flyway Pro or Flyway
|
||||
* Enterprise.
|
||||
* Whether to stream SQL migrations when executing them. Requires Flyway Teams.
|
||||
*/
|
||||
private Boolean stream;
|
||||
|
||||
/**
|
||||
* File name prefix for undo SQL migrations. Requires Flyway Pro or Flyway Enterprise.
|
||||
* File name prefix for undo SQL migrations. Requires Flyway Teams.
|
||||
*/
|
||||
private String undoSqlMigrationPrefix;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* 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.mockito.InOrder;
|
||||
|
||||
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 org.springframework.core.annotation.Order;
|
||||
|
||||
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.inOrder;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Tests for {@link FlywayAutoConfiguration} with Flyway 6.x.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@ClassPathOverrides("org.flywaydb:flyway-core:6.5.6")
|
||||
class Flyway6xAutoConfigurationTests {
|
||||
|
||||
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 callbacksAreConfiguredAndOrdered() {
|
||||
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()).containsExactly(callbackTwo, callbackOne);
|
||||
InOrder orderedCallbacks = inOrder(callbackOne, callbackTwo);
|
||||
orderedCallbacks.verify(callbackTwo).handle(any(Event.class), any(Context.class));
|
||||
orderedCallbacks.verify(callbackOne).handle(any(Event.class), any(Context.class));
|
||||
});
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class CallbackConfiguration {
|
||||
|
||||
@Bean
|
||||
@Order(1)
|
||||
Callback callbackOne() {
|
||||
return mockCallback();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(0)
|
||||
Callback callbackTwo() {
|
||||
return mockCallback();
|
||||
}
|
||||
|
||||
private Callback mockCallback() {
|
||||
Callback callback = mock(Callback.class);
|
||||
given(callback.supports(any(Event.class), any(Context.class))).willReturn(true);
|
||||
return callback;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ import org.flywaydb.core.api.callback.Callback;
|
|||
import org.flywaydb.core.api.callback.Context;
|
||||
import org.flywaydb.core.api.callback.Event;
|
||||
import org.flywaydb.core.api.migration.JavaMigration;
|
||||
import org.flywaydb.core.internal.license.FlywayProUpgradeRequiredException;
|
||||
import org.flywaydb.core.internal.license.FlywayTeamsUpgradeRequiredException;
|
||||
import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
|
@ -380,7 +380,7 @@ class FlywayAutoConfigurationTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
void callbacksAreConfiguredAndOrdered() {
|
||||
void callbacksAreConfiguredAndOrderedByName() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CallbackConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(Flyway.class);
|
||||
|
|
@ -388,7 +388,6 @@ class FlywayAutoConfigurationTests {
|
|||
Callback callbackOne = context.getBean("callbackOne", Callback.class);
|
||||
Callback callbackTwo = context.getBean("callbackTwo", Callback.class);
|
||||
assertThat(flyway.getConfiguration().getCallbacks()).hasSize(2);
|
||||
assertThat(flyway.getConfiguration().getCallbacks()).containsExactly(callbackTwo, callbackOne);
|
||||
InOrder orderedCallbacks = inOrder(callbackOne, callbackTwo);
|
||||
orderedCallbacks.verify(callbackTwo).handle(any(Event.class), any(Context.class));
|
||||
orderedCallbacks.verify(callbackOne).handle(any(Event.class), any(Context.class));
|
||||
|
|
@ -413,7 +412,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.batch=true").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" batch ");
|
||||
});
|
||||
}
|
||||
|
|
@ -424,7 +423,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.dryRunOutput=dryrun.sql").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" dryRunOutput ");
|
||||
});
|
||||
}
|
||||
|
|
@ -435,7 +434,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.errorOverrides=D12345").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" errorOverrides ");
|
||||
});
|
||||
}
|
||||
|
|
@ -453,7 +452,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.oracle-sqlplus=true").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" oracle.sqlplus ");
|
||||
});
|
||||
}
|
||||
|
|
@ -464,7 +463,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.oracle-sqlplus-warn=true").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" oracle.sqlplusWarn ");
|
||||
});
|
||||
}
|
||||
|
|
@ -475,7 +474,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.stream=true").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" stream ");
|
||||
});
|
||||
}
|
||||
|
|
@ -486,7 +485,7 @@ class FlywayAutoConfigurationTests {
|
|||
.withPropertyValues("spring.flyway.undo-sql-migration-prefix=undo").run((context) -> {
|
||||
assertThat(context).hasFailed();
|
||||
Throwable failure = context.getStartupFailure();
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
|
||||
assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class);
|
||||
assertThat(failure).hasMessageContaining(" undoSqlMigrationPrefix ");
|
||||
});
|
||||
}
|
||||
|
|
@ -712,20 +711,19 @@ class FlywayAutoConfigurationTests {
|
|||
static class CallbackConfiguration {
|
||||
|
||||
@Bean
|
||||
@Order(1)
|
||||
Callback callbackOne() {
|
||||
return mockCallback();
|
||||
return mockCallback("b");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(0)
|
||||
Callback callbackTwo() {
|
||||
return mockCallback();
|
||||
return mockCallback("a");
|
||||
}
|
||||
|
||||
private Callback mockCallback() {
|
||||
private Callback mockCallback(String name) {
|
||||
Callback callback = mock(Callback.class);
|
||||
given(callback.supports(any(Event.class), any(Context.class))).willReturn(true);
|
||||
given(callback.getCallbackName()).willReturn(name);
|
||||
return callback;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,11 +113,16 @@ class FlywayPropertiesTests {
|
|||
ignoreProperties(configuration, "dryRunOutputAsFile", "dryRunOutputAsFileName");
|
||||
// Handled as createSchemas
|
||||
ignoreProperties(configuration, "shouldCreateSchemas");
|
||||
// Getters for the DataSource settings rather than actual properties
|
||||
ignoreProperties(configuration, "password", "url", "user");
|
||||
// Flyway 7.0 properties that are not yet supported
|
||||
ignoreProperties(configuration, "cherryPick", "jdbcProperties", "oracleKerberosCacheFile",
|
||||
"oracleKerberosConfigFile", "skipExecutingMigrations");
|
||||
List<String> configurationKeys = new ArrayList<>(configuration.keySet());
|
||||
Collections.sort(configurationKeys);
|
||||
List<String> propertiesKeys = new ArrayList<>(properties.keySet());
|
||||
Collections.sort(propertiesKeys);
|
||||
assertThat(configurationKeys).isEqualTo(propertiesKeys);
|
||||
assertThat(configurationKeys).containsExactlyElementsOf(propertiesKeys);
|
||||
}
|
||||
|
||||
private void ignoreProperties(Map<String, ?> index, String... propertyNames) {
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ bom {
|
|||
]
|
||||
}
|
||||
}
|
||||
library("Flyway", "6.5.6") {
|
||||
library("Flyway", "7.0.0") {
|
||||
group("org.flywaydb") {
|
||||
modules = [
|
||||
"flyway-core"
|
||||
|
|
|
|||
Loading…
Reference in New Issue