web-dev-qa-db-ja.com

Springアプリケーションコンテキストの外部プロパティ?

これまでのところ、Springアプリケーションがあり、うまく機能しています。今、私は再圧縮することなく物事を変更するために、パックされたjarファイルではなく外部設定フォルダにプロパティファイルが欲しいです。これは私が得たものです:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- <property name="locations" value="classpath:/springcontext.properties"/>  -->
<property name="locations" value ="config/springcontext.properties" />

結果のあるものは動作しており、もう1つは動作しません:/誰かが助けてくれますか?

編集:Thx 4コメントはこれまでのところ。

たぶん私の質問は十分に明確ではありませんでした:)。私はMavenビルドを実行し、すべてがパッケージ化されます。このフォルダーを、アウトカムjarの隣のパッケージナットに入れず、このフォルダーにプロパティファイルを入れます。可能?

29
Dennis Ich
<context:property-placeholder location="classpath*:spring/*.properties" />

Springという名前のディレクトリ内のクラスパスのどこかに配置すると(それに応じて名前/ディレクトリを変更します)、上記でアクセスできます

<property name="locations" value ="config/springcontext.properties" />

これはweb-inf/classes/config/springcontext.propertiesを指します

12
fmucar

次のようなものを試すことができます:

<context:property-placeholder 
        location="${ext.properties.dir:classpath:}/servlet.properties" />

そして、ext.properties.dirプロパティは、アプリケーションサーバー/ jvmにあります。それ以外の場合は、デフォルトのプロパティの場所「classpath:/」(つまり、.jarまたは.warのクラスdir)が使用されます。

-Dext.properties.dir=file:/usr/local/etc/

ところで、非常に便利です ブログ投稿

47
masted

ファイルプレフィックスを使用して、次のような外部アプリケーションコンテキストファイルをロードできます。

  <context:property-placeholder location="file:///C:/Applications/external/external.properties"/>
12

これ ブログが役立ちます。秘Theは、SpEL(スプリング式言語)を使用してuser.homeなどのシステムプロパティを読み取り、使用できるSpELを使用してユーザーのホームディレクトリを読み取ることです。
#{ systemProperties['user.home']} Bean要素内の式。たとえば、ホームディレクトリに格納されているプロパティファイルにアクセスするには、PropertyPlaceholderConfigurerで次を使用できます。

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:#{ systemProperties['user.home']}/ur_folder/settings.properties</value>
    </property>
</bean>
10
Sridhar

この質問はやや古いものですが、私のために働いた何かを共有したかったです。外部の場所にあるプロパティにアクセスするいくつかの情報を検索している人々に役立つことを願っています。

これは私のために働いたものです。

  1. プロパティファイルの内容:

    PROVIDER_URL=t3://localhost:8003,localhost:8004
    
  2. applicationContext.xmlファイルの内容:(春3.2.3)

    注意: ${user.home}はOSのシステムプロパティです。

    <context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/>
    
    <bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="Java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                <prop key="Java.naming.provider.url">${PROVIDER_URL}</prop>
            </props>
        </property>
    </bean>
    

${PROVIDER_URL}ファイルのプロパティの値に置き換えられました

それを行う1つの方法は、外部構成フォルダーをJavaプロセスのクラスパスに追加することです。これは私が過去によくやった方法です。

2
pap
<context:property-placeholder location="file:/apps/Tomcat/ath/ath_conf/pcr.application.properties" />

これは私のために動作します。ローカル開発マシンのパスはC:\ apps\Tomcat\ath\ath_confで、サーバー/ apps/Tomcat/ath/ath_confにあります

両方とも私のために働く

1
fjkjava