1

2 つのプロパティ ファイルがあります。

environment.properties:
 - project.host.db3.database.name=oracle

application.properties:
 - database.name=${project.host.db3.database.name}

最初のものは環境変数を表し、2 つ目は Spring プロジェクトで使用されるプロパティを表します。この構成では、environment.properties を設定しようとしますが、もちろん機能しません。

<bean id="systemPropertiesLoader"   
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
    <util:properties location="classpath:environment.properties" />
</property>
</bean>

<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="systemPropertiesLoader">
<property name="locations">
    <list>
        <value>classpath:application.properties</value>
    </list>
</property>

<!-- bean using database.name -->

それは可能ですか?そうでない場合、人々はどのようにしてプロジェクトに不可知論的プロパティ (database.name など) を持ち、1 つのファイル (war、jar など) だけを展開するのでしょうか?

4

1 に答える 1

0

さて、次のようにプロパティを定義する限り、定義されたBean xmlに対して実行可能であるようです:

<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="systemPropertiesLoader">

しかし、サーブレットからプロパティにアクセスしようとした場合:

this.getClass().getClassLoader().getResourceAsStream("application.properties");

あなたはこれを得る可能性があります:

bad port configuration: ${project.host.db3.database.port}
java.lang.NumberFormatException: For input string: "${project.host.db3.database.port}"

yorkw への回答として、同じ war をいくつかの環境に展開し、ホストを -Denvironment=development で構成できるようになったので、開発、運用などのプロパティ ファイルを展開して、次のように簡単に使用できます。

<bean id="systemPropertiesLoader"   
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
    <util:properties location="classpath:**${environment}/**environment.properties" />
</property>
</bean>

それ以外の場合は、すべての環境の展開前に application.properties を置き換える必要があります。これよりも優れたソリューションがあると確信しています。

于 2012-08-08T06:46:56.147 に答える