Expose configuration metadata groups

This commit is contained in:
Eric Bottard
2015-11-26 14:19:31 +01:00
committed by Gunnar Hillert
parent c96c6fcd22
commit 81b04de222

View File

@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.configurationmetadata.ConfigurationMetadataGroup;
import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty;
import org.springframework.boot.configurationmetadata.ConfigurationMetadataRepositoryJsonBuilder;
import org.springframework.boot.loader.archive.Archive;
@@ -44,6 +45,46 @@ public class ModuleConfigurationMetadataResolver {
JarFile.registerUrlProtocolHandler();
}
/**
* Return metadata about configuration properties (as groups) that are documented via
* <a href="http://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html">
* Spring Boot configuration metadata</a> and visible in a module.
*
* @param module a Spring Cloud Stream module; typically a Boot uberjar,
* but directories are supported as well
*/
public List<ConfigurationMetadataGroup> listPropertyGroups(Resource module) {
List<ConfigurationMetadataGroup> result = new ArrayList<>();
ClassLoader classLoader = null;
try {
File moduleFile = module.getFile();
Archive archive = moduleFile.isDirectory() ? new ExplodedArchive(moduleFile) : new JarFileArchive(moduleFile);
classLoader = createClassLoader(archive);
ConfigurationMetadataRepositoryJsonBuilder builder = ConfigurationMetadataRepositoryJsonBuilder.create();
ResourcePatternResolver moduleResourceLoader = new PathMatchingResourcePatternResolver(classLoader);
for (Resource r : moduleResourceLoader.getResources("classpath*:/META-INF/*spring-configuration-metadata.json")) {
builder.withJsonResource(r.getInputStream());
}
for (ConfigurationMetadataGroup group : builder.build().getAllGroups().values()) {
result.add(group);
}
}
catch (Exception e) {
throw new RuntimeException("Exception trying to list configuration properties for module " + module, e);
}
finally {
if (classLoader instanceof Closeable) {
try {
((Closeable) classLoader).close();
}
catch (IOException e) {
// ignore
}
}
}
return result;
}
/**
* Return metadata about configuration properties that are documented via
* <a href="http://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html">