2016-09-08 3 views
0

최근 봄에 spring-configuration-metadata.json 파일을 생성하고 additional-spring-configuration-metadata.json 파일을 생성하는 것이 가능하다는 것을 알게되었습니다.코드 구성 API를 통해 스프링 구성 속성에 액세스하기

Spring을 통해이 정보에 액세스 할 수 있습니까? 예를 들어이 JSON 파일에서 추출한 도움말 메시지를 출력 할 수 있습니까? 나는 Spring documentation에 언급 된 것을 보지 못했습니다. 내가 말할 수있는 한, 설정 클래스는 실제로 주입 된 객체에서 스프링 메타 데이터가없는 POJO이다.

내가 다음 클래스 말해봐 :

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 ("이것은이 설정 옵션에 대한 설명입니다.")''과 같은 커스텀 어노테이션을 생성했습니다. 내 구성 클래스에 대한 도움말 메시지 등을 사용합니다. 메타 데이터 JSON에 항목을 추가하고 이러한 주석을 직접 작성하는 대신 Spring API를 사용하여 항목을 검색 할 수 있고 가능한지 궁금합니다. – Lucas

+0

위의 질문에 예제를 추가했습니다. – Lucas

답변

1

스프링 부트에는 별도의 모듈이 있습니다. 메타 데이터의 일관성을 확인하는 도구에 내부적으로 사용되며 이는 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();