2016-09-08 4 views
0

私は最近、Springがspring-configuration-metadata.jsonファイルを生成し、additional-spring-configuration-metadata.jsonファイルを作成することが可能であることを知りました。Springの設定プロパティへのアクセスコードAPIによるメタデータ

この情報には春からネイティブでアクセスできますか?たとえば、このJSONファイルから抽出されたヘルプメッセージを出力できますか? Spring documentationに記載されているようなものは見られませんでした。私が知る限り、設定クラスは、実際に注入されたオブジェクトに関連付けられたSpringメタデータを持たない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; } 
} 

そして、これは、次のメタデータを生成します:理想的には私はMyConfig.getMyField().getDescription()を書いて、そのリターン"myField description"を持っているいくつかの方法を持っているでしょう

{ 
    "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": [] 
} 

は、私は以下のクラスを持っていると言います。また、JSONにメタデータを追加して同様の方法で取得できるようにしたいと考えています。

+0

あなたが達成しようとしているかを説明することはできますか?どの情報を取得しようとしているのか、その理由は不明です。 – chrylis

+0

だから私は '' @Description( "これはこの設定オプションの説明です")のようなカスタムアノテーションを作成しました。そして私はSpringブート設定のフィールドの上にこれらを追加します。私の設定クラスについては、ヘルプメッセージなどで使用します。これらのアノテーションを自分で作成する代わりに、メタデータ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(); 
関連する問題