2013-03-13 11 views
11


Spring Javaconfigを使用してプロパティファイルをjava.util.Propertiesフィールドに直接ロード/自動配線する方法を教えてください。java.util.PropertiesフィールドのSpring JavaConfig

ありがとうございます!

後で編集 - 回答を依然として探しています: Spring JavaConfigでプロパティファイルを直接java.util.Propertiesフィールドに読み込むことはできますか?

答えて

8

XMLベースウェイ:春のconfigに

:あなたのクラスで

<util:properties id="myProperties" location="classpath:com/foo/my-production.properties"/> 

:注釈があるよう

@Autowired 
@Qualifier("myProperties") 
private Properties myProperties; 

JavaConfigのみ

に見えます:

@PropertySource("classpath:com/foo/my-production.properties") 

これでクラスに注釈を付けると、ファイルから環境にプロパティが読み込まれます。プロパティを取得するには、環境にクラスをオートワイヤーする必要があります。

@Configuration 
@PropertySource("classpath:com/foo/my-production.properties") 
public class AppConfig { 

@Autowired 
private Environment env; 

public void someMethod() { 
    String prop = env.getProperty("my.prop.name"); 
    ... 
} 

Java.util.propertiesに直接挿入する方法はありません。しかし、ラッパーとして機能するこのアノテーションを使用するクラスを作成し、そのようにプロパティを構築することができます。

+0

ありがとうございますが、私はXMLファイルなしでSpring JavaConfigのみを使用してこの結果を得る方法に興味があります。 – Roxana

+0

@Roxana oops。私の投稿を編集しました。 – jacobhyphenated

+1

ありがとうございました。私は確かにプロパティフィールドが必要な特別な状況があります。私はあなたの考えをラッパーで覚えていますが、もっと単純な解決法がないのだろうかと思っています。:) – Roxana

1

xml構成を使用してプロパティを直接注入するこの方法もあります。コンテキストXMLは、この

<util:properties id="myProps" location="classpath:META-INF/spring/conf/myProps.properties"/> 

を持ち、Javaクラスは、ちょうど

@javax.annotation.Resource 
private Properties myProps; 

出来上がりを使用しています!それが読み込まれます。 Springはxmlの 'id'属性を使用して、コード内の変数名にバインドします。

1

これは古いテーマですが、より基本的な解決策もあります。

@Configuration 
public class MyConfig { 
    @Bean 
    public Properties myPropertyBean() { 
     Properties properties = new Properties(); 
     properties.load(...); 
     return properties; 
    } 
} 
4

PropertiesFactoryBeanを宣言する。

@Bean 
public PropertiesFactoryBean mailProperties() { 
    PropertiesFactoryBean bean = new PropertiesFactoryBean(); 
    bean.setLocation(new ClassPathResource("mail.properties")); 
    return bean; 
} 

レガシーコードは、Javaの設定にそれを変換する設定

<bean id="mailConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" value="classpath:mail.properties"/> 
</bean> 

上記のように超簡単です以下でした。

+1

ありがとうございます。 – vikingsteve

0

アプリケーション。YML

root-something: 
    my-properties: 
     key1: val1 
     key2: val2 

あなたのタイプセーフなPOJO:

import java.util.Properties; 
import org.springframework.boot.context.properties.ConfigurationProperties; 

@ConfigurationProperties(prefix = "root-something") 
public class RootSomethingPojo { 

    private Properties myProperties; 

あなたのコンテナ設定:これはmyPropertiesフィールドに直接キーと値のペアを挿入します

@Configuration 
@EnableConfigurationProperties({ RootSomethingPojo .class }) 
public class MySpringConfiguration { 

関連する問題