2016-09-19 17 views
0

externalized configurationのSpringブートのドキュメントを読んで、自動的にsrc/main/resources/application.propertiesファイルをロードしてから、アノテーションを使用するBeanプロパティSpringブートのjava.util.Propertiesへのapplication.propertiesファイルのロード

しかし、application.propertiesのプロパティでjava.util.Propertiesを構築するために使用できる汎用のPropertyHelperクラスが必要です。これはできますか?

以下のように我々は現在、手動でこれを達成している:あなたはすぐに使用PropertySourceを返すことになる、環境周りWrapperを作成することができ

public class PropertyHelper { 

    private static Properties loadProperties() { 
     try { 

      String propsName = "application.properties"; 
      InputStream propsStream = PropertyHelper.class 
        .getClassLoader().getResourceAsStream(propsName); 
      if (propsStream == null) { 
       throw new IOException("Could not read config properties"); 
      } 

      Properties props = new Properties(); 
      props.load(propsStream); 
+0

'application.properties' – Jens

+3

それともあなただけのすべての値を含むプロパティ型Beanのある環境をautowireする前にスラッシュを追加ファイル – rorschach

+1

から 'Environment'を使うとプロパティを取得できますが、すべてのプロパティのリストはありません。あなたは 'env.getProperty(" propertyName ")'を使ってプロパティーを得ることができます –

答えて

1

あなたはそれをこのように使用します。

@PropertySource(name="myName", value="classpath:/myName.properties") 
public class YourService { 

    @Autowired 
    private CustomMapProperties customMapProperties; 
    ... 
    MapPropertySource mapPropertySource = customMapProperties.getMapProperties("myName"); 
    for(String key: mapPropertySource.getSource().keySet()){ 
     System.out.println(mapPropertySource.getProperty(key)); 
    } 

CustomMapPropertiesEnvironmentを注射し、要求を返すその名前に基づいロードされたプロパティファイル:

@Component 
public class CustomMapProperties { 

    @Autowired 
    private Environment env; 

    public MapPropertySource getMapProperties(String name) { 
     for (Iterator<?> it = ((AbstractEnvironment) env).getPropertySources().iterator(); it.hasNext();) { 
      Object propertySource = it.next(); 
      if (propertySource instanceof MapPropertySource 
        && ((MapPropertySource) propertySource).getName().equals(name)) { 
       return (MapPropertySource) propertySource; 
      } 
     } 
     return null; 
    } 
} 
0

ここでは、私はSpringの環境からPropertiesオブジェクトを導出する方法です。私は、java.util.Properties型のプロパティーソースを探します。私の場合は、システムプロパティーとアプリケーションプロパティーを渡します。

@Resource 
private Environment environment; 


@Bean 
public Properties properties() { 
    Properties properties = new Properties(); 

    for (PropertySource<?> source : ((ConfigurableEnvironment) environment).getPropertySources()) { 
     if (source.getSource() instanceof Properties) { 
      log.info("Loading properties from property source " + source.getName()); 
      Properties props = (Properties) source.getSource(); 
      properties.putAll(props); 
     } 
    } 

    return properties; 
} 

ただし、順序は重要であることに注意してください。ほかのプロパティの後にシステムプロパティをロードして、アプリケーションのプロパティをオーバーライドすることもできます。その場合、「systemProperties」を選び出すためにsource.getName()を使用していくつかのより多くの制御コードを追加します。

@Bean 
public Properties properties() { 
    Properties properties = new Properties(); 

    Properties systemProperties = null; 

    for (PropertySource<?> source : ((ConfigurableEnvironment) environment).getPropertySources()) { 
     if (source.getSource() instanceof Properties) { 
      if ("systemProperties".equalsIgnoreCase(source.getName())) { 
       log.info("Found system properties from property source " + source.getName()); 
       systemProperties = (Properties) source.getSource(); 
      } else { 
       log.info("Loading properties from property source " + source.getName()); 
       Properties props = (Properties) source.getSource(); 
       properties.putAll(props); 
      } 
     } 
    } 

    // Load this at the end so they can override application properties. 
    if (systemProperties != null) { 
     log.info("Loading system properties from property source."); 
     properties.putAll(systemProperties); 
    } 

    return properties; 
} 
関連する問題