|
|
|
|
@ -19,6 +19,7 @@ package org.springframework.boot.context.config;
@@ -19,6 +19,7 @@ package org.springframework.boot.context.config;
|
|
|
|
|
import java.io.File; |
|
|
|
|
import java.util.ArrayDeque; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.Deque; |
|
|
|
|
@ -27,6 +28,7 @@ import java.util.List;
@@ -27,6 +28,7 @@ import java.util.List;
|
|
|
|
|
import java.util.Set; |
|
|
|
|
import java.util.regex.Matcher; |
|
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
import org.apache.commons.logging.Log; |
|
|
|
|
|
|
|
|
|
@ -244,19 +246,33 @@ public class StandardConfigDataLocationResolver
@@ -244,19 +246,33 @@ public class StandardConfigDataLocationResolver
|
|
|
|
|
Set<StandardConfigDataReference> references) { |
|
|
|
|
Set<StandardConfigDataResource> empty = new LinkedHashSet<>(); |
|
|
|
|
for (StandardConfigDataReference reference : references) { |
|
|
|
|
if (reference.isMandatoryDirectory()) { |
|
|
|
|
Resource resource = this.resourceLoader.getResource(reference.getDirectory()); |
|
|
|
|
if (resource instanceof ClassPathResource) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
StandardConfigDataResource configDataResource = new StandardConfigDataResource(reference, resource); |
|
|
|
|
ConfigDataResourceNotFoundException.throwIfDoesNotExist(configDataResource, resource); |
|
|
|
|
empty.add(new StandardConfigDataResource(reference, resource, true)); |
|
|
|
|
} |
|
|
|
|
empty.addAll(resolveEmptyDirectories(reference)); |
|
|
|
|
} |
|
|
|
|
return empty; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Set<StandardConfigDataResource> resolveEmptyDirectories(StandardConfigDataReference reference) { |
|
|
|
|
if (!this.resourceLoader.isPattern(reference.getResourceLocation())) { |
|
|
|
|
return resolveNonPatternEmptyDirectories(reference); |
|
|
|
|
} |
|
|
|
|
return resolvePatternEmptyDirectories(reference); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Set<StandardConfigDataResource> resolveNonPatternEmptyDirectories(StandardConfigDataReference reference) { |
|
|
|
|
Resource resource = this.resourceLoader.getResource(reference.getDirectory()); |
|
|
|
|
return (resource instanceof ClassPathResource || !resource.exists()) ? Collections.emptySet() |
|
|
|
|
: Collections.singleton(new StandardConfigDataResource(reference, resource, true)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Set<StandardConfigDataResource> resolvePatternEmptyDirectories(StandardConfigDataReference reference) { |
|
|
|
|
Resource[] resources = this.resourceLoader.getResources(reference.getDirectory(), ResourceType.DIRECTORY); |
|
|
|
|
Assert.state(resources.length > 0, |
|
|
|
|
"No subdirectories found for mandatory directory location '" + reference.getDirectory() + "'."); |
|
|
|
|
return Arrays.stream(resources).filter(Resource::exists) |
|
|
|
|
.map((resource) -> new StandardConfigDataResource(reference, resource, true)) |
|
|
|
|
.collect(Collectors.toCollection(LinkedHashSet::new)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<StandardConfigDataResource> resolve(StandardConfigDataReference reference) { |
|
|
|
|
if (!this.resourceLoader.isPattern(reference.getResourceLocation())) { |
|
|
|
|
return resolveNonPattern(reference); |
|
|
|
|
|