2017-11-15 8 views
1

私は、Springブートのどのプロパティがユーザーによって構成されたか、スプリング自動構成かを判断しようとしています。私はすべてのプロパティをリストすることができますが、私はユーザーが宣言したプロパティを取得する方法を特定していません。 application.properties:Springブートユーザープロパティの抽出

//このメソッドは、春の環境

public Properties getSpringEnvironmentProperties() { 
    Properties props = new Properties(); 
    MutablePropertySources propSrcs = ((AbstractEnvironment) env).getPropertySources(); 
    StreamSupport.stream(propSrcs.spliterator(), false) 
     .filter(ps -> ps instanceof EnumerablePropertySource) 
     .map(ps -> ((EnumerablePropertySource) ps).getPropertyNames()) 
     .flatMap(Arrays::<String>stream) 
     .forEach(propName -> props.setProperty(propName, env.getProperty(propName))); 
    return props; 
    } 

内のすべてのプロパティを取得するだけのようなファイルで宣言されているユーザーのプロパティを取得する方法はありますか?

答えて

1

あなたは、以下のステップ、ファイル複雑なプロパティのため@ConfigurationPropertiesを使用することができます。

ステップ1:これらのプロパティを格納application.propertiesを作成

#App 
app.menus[0].label=Home 
app.menus[0].path=/ 
app.menus[1].label=Java Core 
app.menus[1].path=/javacore 
app.menus[2].label=Spring 
app.menus[2].path=/spring 

ステップ2:宣言Javaプロパティクラス

@ConfigurationProperties("app") 
public class AppProperties { 

    private List<Menu> menus = new ArrayList<Menu>(); 
    //do stuff 
} 

ステップ3:サービスにプロパティを注入する

private AppProperties app; 

あなたはポストSpring boot configuration properties example

・ホープこのヘルプから作業の例を見つけることができます!

+0

私はアプリケーションの作者でも動作しますが、スターターを書くときは動作しません。ユーザーが使用するプロパティファイルの名前はわかりません。 –

+0

あなたのケースは私を混乱させます。プロパティを制御できない場合は、既存のシステムプロパティをオーバーライドする可能性があるため、 –

+1

これは予想されます。私は、ユーザーが作成したすべてのプロパティを解析し、その情報をデフォルトでRest Endpointとして提供するSpring Bootスターターを効果的に作成しています。 (アクチュエーターと概念が似ています) –

関連する問題