Skip searching of nonexistent directory in PathMatchingResourcePatternResolver

Prior to this commit, when PathMatchingResourcePatternResolver
processed a `file:` pattern (for example, `file:/app-config/**`) for a
`rootPath` that did not exist in the filesystem, the resolver attempted
to search the directory and logged a WARNING message similar to the
following when it failed to do so.

Failed to search in directory [/app-config/] for files matching pattern
[**]: java.nio.file.NoSuchFileException: /app-config/

To avoid unnecessary attempts to search a nonexistent directory,
PathMatchingResourcePatternResolver now skips searching of a nonexistent
directory and preemptively logs an INFO message similar to the
following.

Skipping search for files matching pattern [**]: directory [/app-config]
does not exist

Closes gh-31111
This commit is contained in:
Sam Brannen
2023-08-25 14:48:15 +02:00
parent 19570338c9
commit 89b7a6bf47
2 changed files with 21 additions and 0 deletions

View File

@@ -90,6 +90,19 @@ class PathMatchingResourcePatternResolverTests {
assertFilenames(pattern, expectedFilenames);
}
@Test // gh-31111
void usingFileProtocolWithWildcardInPatternAndNonexistentRootPath() throws IOException {
Path testResourcesDir = Paths.get("src/test/resources").toAbsolutePath();
String pattern = String.format("file:%s/example/bogus/**", testResourcesDir);
assertThat(resolver.getResources(pattern)).isEmpty();
// When the log level for the resolver is set to at least INFO, we should see
// a log entry similar to the following.
//
// [main] INFO o.s.c.i.s.PathMatchingResourcePatternResolver -
// Skipping search for files matching pattern [**]: directory
// [/<...>/spring-core/src/test/resources/example/bogus] does not exist
}
@Test
void encodedHashtagInPath() throws IOException {
Path rootDir = Paths.get("src/test/resources/custom%23root").toAbsolutePath();