4

SpringのapplicationContext.xmlでJVMから渡されたプロパティ値にアクセスしたいと思います。これを達成するために私が知っている1つの方法は、Springの式言語機能によるものです#{systemProperties.myProperty}-DmyProperty=xyz

しかし、ユーザーがサーバーのJVMオプションから値を設定しない場合に備えて、JVMを介して割り当てるそのようなプロパティごとにデフォルト値を設定することに関心があります。Springのコンテキストxmlファイルでこれをどのように達成できますか?助けてください。

4

3 に答える 3

3

デフォルト値を使用してコンテキストからマップパラメータを取得し、システムプロパティを初期化するBeanを作成できます。

<bean class="test.B1">
    <constructor-arg>
        <map>
            <entry key="p1" value="v1" />
            <entry key="p2" value="v2" />
                                 ....
        </map>
    </constructor-arg>
</bean>

public B1(Map<String, String> defaultProperties) {
    for (Map.Entry<String, String> e : defaultProperties.entrySet()) {
        if (System.getProperty(e.getKey()) == null) {
            System.setProperty(e.getKey()
                    , e.getValue());
        }
    }
}

コンテキストでのB1定義は、#{systemProperties.myProperty}プロパティが最初に初期化されるように、使用するBeanの前にある必要があります

アップデート

これは、システムプロパティのオーバーライドに関するものでした。ただし、ここのようにSpringプレースホルダーをオーバーライドするだけでよい場合

<bean class="test.B1">
    <property name="prop1" value="${xxx}" />
</bean>

プロパティプレースホルダーのローカルオーバーライド属性を「true」に設定するだけで十分です

<context:property-placeholder location="classpath:/app.properties" local-override="true" />
于 2012-12-02T10:18:54.200 に答える
1

Spring ELでは、デフォルト値を追加できます。あなたの場合:

#{systemProperties.myProperty:MyDefaultValue}
于 2012-12-02T16:13:17.560 に答える
1

注釈ベースの構成を使用すると、エルビス演算子を使用してSpringELにデフォルトを提供できます。

 @Value("#{systemProperties['hostname'] ?: 'default-hostname'}")
 private String hostname;

atrainの有益な回答に基づいています。私はまだコメントすることができません、または私はそこに構文修正を入れたでしょう:(

于 2016-04-29T10:00:46.273 に答える