2016-09-08 111 views
0

我最近得知Spring有可能生成spring-configuration-metadata.json文件並創建additional-spring-configuration-metadata.json文件。通過代碼API訪問彈簧配置屬性元數據

是否有可能通過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

你能解釋一下你想要完成什麼?這是有點不清楚你想要檢索什麼信息或爲什麼。 – chrylis

+0

所以現在我已經創建了一個自定義註釋,比如'@Description(「這是這個配置選項的描述」)'',並且將這些添加到Spring Boot配置中的這些字段的上面,然後我將其反射到在幫助消息中使用我的配置類。我希望能夠將項目添加到元數據JSON中,然後使用Spring API檢索它們,而不是自己創建這些註釋,並且想知道是否可以實現。 – Lucas

+0

我在上面的問題中添加了一個示例。 – Lucas

回答

1

Spring Boot附帶一個單獨的模塊,可以做到這一點。它在內部用於驗證元數據一致性的工具,這也是STS支持的基礎。

檢查spring-boot-configuration-metadata項目。

如果您添加到您的項目,你可以輕鬆地構建在當前的classpath定義鍵的庫:

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