parent
7ada32ca77
commit
297b4dfe70
|
@ -234,6 +234,11 @@ public final class FlywayAutoConfiguration {
|
|||
.resolveLocations(properties.getLocations())
|
||||
.toArray(new String[0]);
|
||||
configuration.locations(locations);
|
||||
map.from(properties.getCallbackLocations())
|
||||
.when((callbackLocations) -> !ObjectUtils.isEmpty(callbackLocations))
|
||||
.to((callbackLocations) -> configuration.callbackLocations(
|
||||
new LocationResolver(configuration.getDataSource()).resolveLocations(callbackLocations)
|
||||
.toArray(new String[0])));
|
||||
map.from(properties.isFailOnMissingLocations())
|
||||
.to((failOnMissingLocations) -> configuration.failOnMissingLocations(failOnMissingLocations));
|
||||
map.from(properties.getEncoding()).to((encoding) -> configuration.encoding(encoding));
|
||||
|
|
|
@ -60,6 +60,15 @@ public class FlywayProperties {
|
|||
*/
|
||||
private List<String> locations = new ArrayList<>(Collections.singletonList("classpath:db/migration"));
|
||||
|
||||
/**
|
||||
* Locations of callbacks. Can contain the special "{vendor}" placeholder to use
|
||||
* vendor-specific callbacks. Unprefixed locations or locations starting with
|
||||
* "classpath:" point to a package on the classpath and may contain both SQL and
|
||||
* Java-based callbacks. Locations starting with "filesystem:" point to a directory on
|
||||
* the filesystem, may only contain SQL callbacks.
|
||||
*/
|
||||
private List<String> callbackLocations = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Encoding of SQL migrations.
|
||||
*/
|
||||
|
@ -365,6 +374,14 @@ public class FlywayProperties {
|
|||
this.locations = locations;
|
||||
}
|
||||
|
||||
public List<String> getCallbackLocations() {
|
||||
return this.callbackLocations;
|
||||
}
|
||||
|
||||
public void setCallbackLocations(List<String> callbackLocations) {
|
||||
this.callbackLocations = callbackLocations;
|
||||
}
|
||||
|
||||
public Charset getEncoding() {
|
||||
return this.encoding;
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@ class NativeImageResourceProviderCustomizer extends ResourceProviderCustomizer {
|
|||
@Override
|
||||
public void customize(FluentConfiguration configuration) {
|
||||
if (configuration.getResourceProvider() == null) {
|
||||
Scanner<JavaMigration> scanner = new Scanner<>(JavaMigration.class, false, new ResourceNameCache(),
|
||||
new LocationScannerCache(), configuration);
|
||||
Scanner<JavaMigration> scanner = new Scanner<>(JavaMigration.class, new ResourceNameCache(),
|
||||
new LocationScannerCache(), configuration, configuration.getLocations());
|
||||
NativeImageResourceProvider resourceProvider = new NativeImageResourceProvider(scanner,
|
||||
configuration.getClassLoader(), Arrays.asList(configuration.getLocations()),
|
||||
configuration.getEncoding(), configuration.isFailOnMissingLocations());
|
||||
|
|
|
@ -560,6 +560,19 @@ class FlywayAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithResource(name = "com/example/h2/beforeEachMigrate.sql", content = "DROP TABLE IF EXISTS TEMP;")
|
||||
void useOneCallbackLocationWithVendorSpecificPackage() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.flyway.callback-locations=classpath:com.example.{vendor}")
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(Flyway.class);
|
||||
Flyway flyway = context.getBean(Flyway.class);
|
||||
assertThat(flyway.getConfiguration().getCallbackLocations())
|
||||
.containsExactly(new Location("classpath:com.example.h2"));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void callbacksAreConfiguredAndOrderedByName() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CallbackConfiguration.class)
|
||||
|
|
|
@ -54,6 +54,8 @@ class FlywayPropertiesTests {
|
|||
assertThat(properties.isFailOnMissingLocations()).isEqualTo(configuration.isFailOnMissingLocations());
|
||||
assertThat(properties.getLocations().stream().map(Location::new).toArray(Location[]::new))
|
||||
.isEqualTo(configuration.getLocations());
|
||||
assertThat(properties.getCallbackLocations().stream().map(Location::new).toArray(Location[]::new))
|
||||
.isEqualTo(configuration.getCallbackLocations());
|
||||
assertThat(properties.getEncoding()).isEqualTo(configuration.getEncoding());
|
||||
assertThat(properties.getConnectRetries()).isEqualTo(configuration.getConnectRetries());
|
||||
assertThat(properties.getConnectRetriesInterval()).extracting(Duration::getSeconds)
|
||||
|
@ -130,7 +132,7 @@ class FlywayPropertiesTests {
|
|||
"environmentProvisionMode", "provisionMode", "cleanOnValidationError");
|
||||
// Handled by the conversion service
|
||||
ignoreProperties(configuration, "baselineVersionAsString", "encodingAsString", "locationsAsStrings",
|
||||
"targetAsString");
|
||||
"callbackLocationsAsStrings", "targetAsString");
|
||||
// Handled as initSql array
|
||||
ignoreProperties(configuration, "initSql");
|
||||
ignoreProperties(properties, "initSqls");
|
||||
|
|
|
@ -375,7 +375,7 @@ bom {
|
|||
javadoc("elasticsearch-java", version -> "https://javadoc.io/doc/co.elastic.clients/elasticsearch-java/%s/index.html".formatted(version), "co.elastic.clients.elasticsearch", "co.elastic.clients.transport")
|
||||
}
|
||||
}
|
||||
library("Flyway", "11.12.0") {
|
||||
library("Flyway", "11.13.0") {
|
||||
group("org.flywaydb") {
|
||||
modules = [
|
||||
"flyway-commandline",
|
||||
|
|
Loading…
Reference in New Issue