通过代码API访问Spring配置属性元数据

时间:2016-09-08 17:29:27

标签: java json spring spring-boot configuration

我最近了解到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中添加其他元数据并以类似的方式检索它们。

1 个答案:

答案 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();