From 3c3849e28457f9c75ac21b1f33fbb68ddee462a3 Mon Sep 17 00:00:00 2001 From: Chanwon-Seo Date: Thu, 28 Aug 2025 21:08:02 +0900 Subject: [PATCH 1/4] Fix: Allow empty string for spring.flyway.ignore-migration-patterns Allows 'spring.flyway.ignore-migration-patterns' to be set to an empty string to align with Flyway's documented behavior for unsetting default migration patterns. Signed-off-by: Chanwon-Seo --- .../flyway/autoconfigure/FlywayAutoConfiguration.java | 1 - .../autoconfigure/FlywayAutoConfigurationTests.java | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfiguration.java b/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfiguration.java index 110e96bee118..59b29e32543b 100644 --- a/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfiguration.java +++ b/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfiguration.java @@ -320,7 +320,6 @@ private void configureProperties(FluentConfiguration configuration, FlywayProper map.from(properties.getSkipExecutingMigrations()) .to((skipExecutingMigrations) -> configuration.skipExecutingMigrations(skipExecutingMigrations)); map.from(properties.getIgnoreMigrationPatterns()) - .whenNot(List::isEmpty) .to((ignoreMigrationPatterns) -> configuration .ignoreMigrationPatterns(ignoreMigrationPatterns.toArray(new String[0]))); map.from(properties.getDetectEncoding()) diff --git a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java index 2982b2f1c99f..0e937124c076 100644 --- a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java +++ b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java @@ -897,6 +897,14 @@ void ignoreMigrationPatternsCorrectlyMapped() { .containsExactly(ValidatePattern.fromPattern("*:missing"))); } + @Test + void ignoreMigrationPatternsIsEmpty() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.ignore-migration-patterns=") + .run((context) -> assertThat(context.getBean(Flyway.class).getConfiguration().getIgnoreMigrationPatterns()) + .isEmpty()); + } + private ContextConsumer validateFlywayTeamsPropertyOnly(String propertyName) { return (context) -> { assertThat(context).hasFailed(); From 6d8b830173ed357d54062fcf0a09ce22f8fb9e1a Mon Sep 17 00:00:00 2001 From: Chanwon-Seo Date: Fri, 29 Aug 2025 15:45:19 +0900 Subject: [PATCH 2/4] Fix Allow ignoreMigrationPatterns to be empty Removes the `.whenNot(List::isEmpty)` condition to allow clearing the ignore-migration-patterns property via an empty string. To avoid affecting existing users, the property's default is now aligned with Flyway's default of `*:future` Signed-off-by: Chanwon-Seo --- .../boot/flyway/autoconfigure/FlywayProperties.java | 6 +++--- .../autoconfigure/FlywayAutoConfigurationTests.java | 9 ++++++++- .../boot/flyway/autoconfigure/FlywayPropertiesTests.java | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayProperties.java b/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayProperties.java index ea07ff865043..e41b74fdb57e 100644 --- a/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayProperties.java +++ b/module/spring-boot-flyway/src/main/java/org/springframework/boot/flyway/autoconfigure/FlywayProperties.java @@ -323,7 +323,7 @@ public class FlywayProperties { /** * List of patterns that identify migrations to ignore when performing validation. */ - private @Nullable List ignoreMigrationPatterns; + private List ignoreMigrationPatterns = Collections.singletonList("*:future"); /** * Whether to attempt to automatically detect SQL migration file encoding. @@ -757,11 +757,11 @@ public void setSkipExecutingMigrations(@Nullable Boolean skipExecutingMigrations this.skipExecutingMigrations = skipExecutingMigrations; } - public @Nullable List getIgnoreMigrationPatterns() { + public List getIgnoreMigrationPatterns() { return this.ignoreMigrationPatterns; } - public void setIgnoreMigrationPatterns(@Nullable List ignoreMigrationPatterns) { + public void setIgnoreMigrationPatterns(List ignoreMigrationPatterns) { this.ignoreMigrationPatterns = ignoreMigrationPatterns; } diff --git a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java index 0e937124c076..a99520476c14 100644 --- a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java +++ b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayAutoConfigurationTests.java @@ -898,7 +898,14 @@ void ignoreMigrationPatternsCorrectlyMapped() { } @Test - void ignoreMigrationPatternsIsEmpty() { + void ignoreMigrationPatternsUsesDefaultValuesWhenNotSet() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .run((context) -> assertThat(context.getBean(Flyway.class).getConfiguration().getIgnoreMigrationPatterns()) + .containsExactly(new FluentConfiguration().getIgnoreMigrationPatterns())); + } + + @Test + void ignoreMigrationPatternsWhenEmpty() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) .withPropertyValues("spring.flyway.ignore-migration-patterns=") .run((context) -> assertThat(context.getBean(Flyway.class).getConfiguration().getIgnoreMigrationPatterns()) diff --git a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java index ce7d03b9365b..649451dde63c 100644 --- a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java +++ b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java @@ -30,6 +30,7 @@ import org.flywaydb.core.api.configuration.ClassicConfiguration; import org.flywaydb.core.api.configuration.Configuration; import org.flywaydb.core.api.configuration.FluentConfiguration; +import org.flywaydb.core.api.pattern.ValidatePattern; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanWrapper; @@ -95,6 +96,8 @@ void defaultValuesAreConsistent() { assertThat(properties.getScriptPlaceholderSuffix()).isEqualTo(configuration.getScriptPlaceholderSuffix()); assertThat(properties.isExecuteInTransaction()).isEqualTo(configuration.isExecuteInTransaction()); assertThat(properties.getCommunityDbSupportEnabled()).isNull(); + assertThat(configuration.getIgnoreMigrationPatterns()).extracting(Object::toString) + .isEqualTo(properties.getIgnoreMigrationPatterns()); } @Test From ac59c843b929bbbceba9057fe018e04e7a1944f2 Mon Sep 17 00:00:00 2001 From: Chanwon-Seo Date: Fri, 29 Aug 2025 21:29:19 +0900 Subject: [PATCH 3/4] Fix Allow ignoreMigrationPatterns to be empty Removes the `.whenNot(List::isEmpty)` check to allow clearing the property. The property's default is aligned with Flyway's to avoid breaking existing behavior, and new tests verify both changes. Signed-off-by: Chanwon-Seo --- .../boot/flyway/autoconfigure/FlywayPropertiesTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java index 649451dde63c..ac72c635fcb4 100644 --- a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java +++ b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java @@ -30,7 +30,6 @@ import org.flywaydb.core.api.configuration.ClassicConfiguration; import org.flywaydb.core.api.configuration.Configuration; import org.flywaydb.core.api.configuration.FluentConfiguration; -import org.flywaydb.core.api.pattern.ValidatePattern; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanWrapper; From cfb097e0b19c78faf00899008c6c21e2af9ff804 Mon Sep 17 00:00:00 2001 From: Chanwon-Seo Date: Sat, 30 Aug 2025 02:06:30 +0900 Subject: [PATCH 4/4] Fix Correct assertion order for Flyway ignore migration patterns Reversed actual/expected comparison for ignoreMigrationPatterns, using type-safe ValidatePattern. Signed-off-by: Chanwon-Seo --- .../boot/flyway/autoconfigure/FlywayPropertiesTests.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java index ac72c635fcb4..3a85cfbecb57 100644 --- a/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java +++ b/module/spring-boot-flyway/src/test/java/org/springframework/boot/flyway/autoconfigure/FlywayPropertiesTests.java @@ -30,6 +30,7 @@ import org.flywaydb.core.api.configuration.ClassicConfiguration; import org.flywaydb.core.api.configuration.Configuration; import org.flywaydb.core.api.configuration.FluentConfiguration; +import org.flywaydb.core.api.pattern.ValidatePattern; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanWrapper; @@ -95,8 +96,8 @@ void defaultValuesAreConsistent() { assertThat(properties.getScriptPlaceholderSuffix()).isEqualTo(configuration.getScriptPlaceholderSuffix()); assertThat(properties.isExecuteInTransaction()).isEqualTo(configuration.isExecuteInTransaction()); assertThat(properties.getCommunityDbSupportEnabled()).isNull(); - assertThat(configuration.getIgnoreMigrationPatterns()).extracting(Object::toString) - .isEqualTo(properties.getIgnoreMigrationPatterns()); + assertThat(properties.getIgnoreMigrationPatterns().stream().map(ValidatePattern::fromPattern)) + .containsExactly(configuration.getIgnoreMigrationPatterns()); } @Test