Manually way/library to generate config metadata for spring boot
- You could generate auto configuration classes out of a test like this
class MetadataGeneratorTest {
@Test
public void generateAutoConfigMetadata() {
final AutoConfigurationClass classList = new AutoConfigurationClass(Groups.class, Hints.class);
classList.newAutoConfigClass(Values.class, Properties.class);
final Path generated = classList.generate();
}
}
- Output from example:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
berlin.yuna.configmetadata.model.Groups
berlin.yuna.configmetadata.model.Hints
berlin.yuna.configmetadata.model.Values
berlin.yuna.configmetadata.model.Properties
- You could generate metadata out of a test like this
public class ConfigMetadataGeneratorTest {
@Test
public void generateMetadataFromEnum() {
final ConfigurationMetadata metadata = new ConfigurationMetadata("my.group", ExampleEnumConfig.class);
for (ExampleEnumConfig c : ExampleEnumConfig.values()) {
final Class<?> type = c.getDefaultValue().getClass();
metadata.newProperties().name(c.name().toLowerCase()).description(c.getDescription()).type(type);
}
metadata.generate();
}
}
- Test config enum class behind the scenes
public enum ExampleEnumConfig {
CLUSTER_ID("test-cluster", "Cluster ID (default: test-cluster)"),
PORT(4222, "Use port for clients (default: 4222)"),
MAX_BYTES(0L, "Max messages total size per channel (0 for unlimited)"),
INFO(true, "Enable info output"),
DEBUG(false, "Debug the raw protocol");
private final Object defaultValue;
private final String description;
ExampleEnumConfig(final Object defaultValue, final String description) {
this.defaultValue = defaultValue;
this.description = description;
}
public Object getDefaultValue() {
return defaultValue;
}
public String getDescription() {
return description;
}
}
- output from example:
{
"hints" : [ ],
"groups" : [ {
"name" : "my.group",
"type" : "berlin.yuna.configmetadata.model.ExampleEnumConfig",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
} ],
"properties" : [ {
"name" : "my.group.cluster_id",
"type" : "java.lang.String",
"description" : "Cluster ID (default: test-cluster)",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
}, {
"name" : "my.group.port",
"type" : "java.lang.Integer",
"description" : "Use port for clients (default: 4222)",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
}, {
"name" : "my.group.max_bytes",
"type" : "java.lang.Long",
"description" : "Max messages total size per channel (0 for unlimited)",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
}, {
"name" : "my.group.info",
"type" : "java.lang.Boolean",
"description" : "Enable info output",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
}, {
"name" : "my.group.debug",
"type" : "java.lang.Boolean",
"description" : "Debug the raw protocol",
"sourceType" : "berlin.yuna.configmetadata.model.ExampleEnumConfig"
} ]
}