2017-10-12 9 views
1

私は以下の方法でプロパティから値を取得しました。しかし、これらのどれがコーディング標準に従うのが最善かを知りたいのですが?また、Springのプロパティファイルから値を取得できる他の方法はありますか?他のコンフィギュレーションクラス(ApplicationConfigurationなど)とともにSpringのプロパティファイルから値を取得する最も良い方法は何ですか?

PropertySourcesPlaceholderConfigurer 
getEnvironment() from the Spring's Application Context 
Spring EL @Value 

答えて

1

私は注釈@Serviceでクラスを作成し、ここで私は私のファイルのプロパティにアクセスするには、次のフィールドがあります

@Service 
public class Properties(){ 

    @Value("${com.something.user.property}") 
    private String property; 

    public String getProperty(){ return this.property; } 

} 

その後クラスをオートワイヤリングし、プロパティファイルからプロパティを取得することができます

0

@Valueはプロパティファイルからフィールドに値を挿入するため、簡単で使いやすい方法です。

どちらも古いPropertyPlaceholderConfigurerと新しいPropertySourcesPlaceholderConfigurerは春3.1でBean定義のプロパティ値と@value注釈内で解決$ {...}プレースホルダを追加しました。

とは異なりGetEnvironment関数は

春環境へのプロパティを公開しませんプロパティ・プレースホルダーを使用して - これは、この のような値を取得すると、動作しないことを意味します - それがnullを返します。

<context:property-placeholder location="classpath:foo.properties" />を使用し、を使用している場合常にnullを返します。

はGetEnvironment関数を使用して問題のため、この記事を参照してください。Expose <property-placeholder> properties to the Spring Environment

また、春ブーツであなたはapplication.propertiesに階層的かつタイプセーフで、独自のプロパティを定義する@ConfigurationPropertiesを使用することができます。すべてのフィールドに@Valueを入れる必要はありません。 application.propertiesで

@ConfigurationProperties(prefix = "database") 
public class Database { 
    String url; 
    String username; 
    String password; 

    // standard getters and setters 
} 

database.url=jdbc:postgresql:/localhost:5432/instance 
database.username=foo 
database.password=bar 

引用から:properties with spring

1

答えは、ある それが依存しています。

プロパティが設定値の場合、 propertyConfigurer (以下はSpringのxml構成ファイルの例です)を構成します。最後のファイルから、このように構成された

<bean id="propertyConfigurer" 
     class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="locations"> 
     <list> 
      <value>classpath:configuration.properties</value> 
      <value>classpath:configuration.overrides.properties</value> 
     </list> 
    </property> 
</bean> 

、 プロパティが (場所リストに)earler見られるものを上書きしました。 これにより、warファイルにバンドルされている標準のconfiguration.propertiesファイルを出荷し、各インストール場所にconfiguration.overrides.propertiesを格納して、インストールシステムの違いを考慮することができます。

propertyConfigurerを取得したら、@Value注釈を使用して に注釈を付けます。ここで は一例です:

@Value("${some.configuration.value}") 
private String someConfigurationValue; 

一つのクラスに設定値をクラスタ化するために必要な が、そうすることは値が使用されている場合、それは簡単に見つけることができますされていません。

+0

ああ、XML構成。どのような興味深い骨董品... –

関連する問題