我最近了解到Spring可以生成spring-configuration-metadata.json
文件并创建additional-spring-configuration-metadata.json
文件。
是否可以通过Spring本地访问此信息,例如,是否能够打印从此JSON文件中提取的帮助消息?我没有看到Spring documentation中提到的任何内容。据我所知,配置类是POJO,它们在实际注入的对象中没有与它们相关的任何Spring元数据。
说我有以下课程:
package test;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "myConfig")
public class MyConfig
{
/**
* myField description.
*/
private int myField = 3;
public int setMyField(int i){ myField = i; }
public int getMyField(){ return myField; }
}
这将生成以下元数据:
{
"groups": [{
"name": "myConfig",
"type": "test.MyConfig",
"sourceType": "test.MyConfig"
}],
"properties": [
{
"name": "myConfig",
"type": "java.lang.Integer",
"description": "myField description.",
"sourceType": "test.MyConfig",
"defaultValue": 3
}
],
"hints": []
}
理想情况下,我可以通过某种方式编写MyConfig.getMyField().getDescription()
并返回"myField description"
。我还希望能够在JSON中添加其他元数据并以类似的方式检索它们。
答案 0 :(得分:3)
Spring Boot附带了一个独立的模块。它在内部用于验证元数据一致性的工具,这也是STS支持的基础。
检查spring-boot-configuration-metadata项目。
如果将其添加到项目中,则可以轻松构建当前类路径中定义的密钥存储库:
Resource[] resources = new PathMatchingResourcePatternResolver()
.getResources("classpath*:META-INF/spring-configuration-metadata.json");
ConfigurationMetadataRepositoryJsonBuilder builder = ConfigurationMetadataRepositoryJsonBuilder.create();
for (Resource resource : resources) {
try (InputStream in = resource.getInputStream()) {
builder.withJsonResource(in);
}
}
ConfigurationMetadataRepository repository = builder.build();