1

私は何かを想定していて、今ではそれが正しくないことを確認しています。私のSpringコンテキストでは、次の構成プロパティ宣言があります。

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="searchContextAttributes" value="true" />
        <property name="contextOverride" value="true" />
        <property name="locations">
            <list>
                <value>classpath:/app.properties</value>
            </list>
        </property>
    </bean>

からの値app.propertiesはシステムプロパティをオーバーライドするので、次のようにJavaクラスで直接アクセスできると思いました。

String someThingFromPropertyFile = System.getProperty("nameFromPropertyFile");

そしてもちろん、私はいたるところにnullポインタ例外を受け取ります。ここで、アプリケーション(アプリケーションのJavaクラス部分)からアプリケーションのプロパティにアクセスする方法を尋ねます。

以下にこれよりも良い方法がありますか(私はそれが悪いと言っているわけではありません)。

Springを使用してプログラムでプロパティファイルにアクセスしますか?

4

2 に答える 2

6

アプリのコンテキストで:

 <context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>

次に、Javaでこれを行うことができます:

@Value("${cities}")
private String cities;

your.propertiesにはこれが含まれています:

cities = my test string 
于 2012-10-09T15:51:52.613 に答える
0

SpringプロパティはプロパティをオーバーライドしませんSystem。それは逆に機能します。Springからではなく、からすべてのプロパティを取得する必要がありますSystem.getProperties()。プロパティは、同じ名前のSystemプロパティをオーバーライドします。Springあなたが設定しているのは、プロパティからプロパティ値を取得すると勝つSYSTEM_PROPERTIES_MODE_OVERRIDEと言っています。SpringSystem

値を に設定しますSYSTEM_PROPERTIES_MODE_FALLBACK。これはデフォルトなので、実際に設定する必要はありません。

これを念頭に置いている場合、@NimChimpsky には、プロパティ値にアクセスするための正しい方法があります。

@Value("${nameFromPropertyFileOrSystemProperty}")
private String someThingFromProperty;
于 2012-10-09T16:40:55.503 に答える