diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProvider.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProvider.java index 7970d9aad67..47dc32b64d0 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProvider.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProvider.java @@ -145,7 +145,7 @@ class NativeImageResourceProvider implements ResourceProvider { private Resource[] getResources(PathMatchingResourcePatternResolver resolver, Location location, Resource root) { try { - return resolver.getResources(root.getURI() + "/*"); + return resolver.getResources(root.getURI() + "/**/*"); } catch (IOException ex) { throw new UncheckedIOException("Failed to list resources for " + location.getDescriptor(), ex); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index 16952805132..56ce9402515 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -968,6 +968,8 @@ class FlywayAutoConfigurationTests { new FlywayAutoConfigurationRuntimeHints().registerHints(runtimeHints, getClass().getClassLoader()); assertThat(RuntimeHintsPredicates.resource().forResource("db/migration/")).accepts(runtimeHints); assertThat(RuntimeHintsPredicates.resource().forResource("db/migration/V1__init.sql")).accepts(runtimeHints); + assertThat(RuntimeHintsPredicates.resource().forResource("db/migration/nested/V2__users.sql")) + .accepts(runtimeHints); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProviderCustomizerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProviderCustomizerTests.java index 083e5b606ad..9563a85082d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProviderCustomizerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/NativeImageResourceProviderCustomizerTests.java @@ -25,6 +25,7 @@ import org.flywaydb.core.internal.resource.NoopResourceProvider; import org.junit.jupiter.api.Test; import org.springframework.boot.testsupport.classpath.resources.WithResource; +import org.springframework.boot.testsupport.classpath.resources.WithResources; import static org.assertj.core.api.Assertions.assertThat; @@ -56,6 +57,19 @@ class NativeImageResourceProviderCustomizerTests { assertThat(migrations).containsExactly(migration); } + @Test + @WithResources({ @WithResource(name = "db/migration/V1__init.sql"), + @WithResource(name = "db/migration/nested/V2__users.sql") }) + void nativeImageResourceProviderShouldFindNestedMigrations() { + FluentConfiguration configuration = new FluentConfiguration(); + this.customizer.customize(configuration); + ResourceProvider resourceProvider = configuration.getResourceProvider(); + Collection migrations = resourceProvider.getResources("V", new String[] { ".sql" }); + LoadableResource v1 = resourceProvider.getResource("V1__init.sql"); + LoadableResource v2 = resourceProvider.getResource("nested/V2__users.sql"); + assertThat(migrations).containsExactly(v1, v2); + } + @Test void shouldBackOffOnCustomResourceProvider() { FluentConfiguration configuration = new FluentConfiguration();