7

org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurerサーバーのファイルシステムからプロパティファイルをロードするために、以前は廃止されたクラスを使用していました。次のBeanを定義しました:

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="locations" value="${config}"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="searchContextAttributes" value="true"/>
    <property name="contextOverride" value="false"/>
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="searchSystemEnvironment" value="false"/>
</bean>

は、Tomcat の起動時に渡される引数です。configつまり、

-Dconfig=/path/to/application.properties

webapp には、コンテキスト ファイルもあります。

<Context docBase="/path/to/application.war">
    <Parameter name="host" value="localhost" override="false"/>
    <Parameter name="port" value="8080" override="false"/>
</Context>

.properties引数で指定されたファイルに、-Dconfig他の Bean が参照するプロパティが含まれている場合は、.propertiesファイルの値が使用されます。それ以外の場合は、コンテキスト xml ファイルの値が使用されます。

これにより、WAR とともにデプロイされた一連のデフォルト プロパティを持つことができ、必要に応じて、.properties特定の値を上書きするファイルを指定することができました。

現在、Spring 3.1 で新しいプロパティの抽象化を使用するように更新していますが、これと同等のアプローチが何であるかを理解できないようです。

同じコンテキスト ファイルと war を同じ方法でデプロイしました。アプリケーションには次のものが含まれています。

<context:property-placeholder
        location="${config}"
        system-properties-mode="OVERRIDE"
        ignore-resource-not-found="true"
        ignore-unresolvable="true"/>

これは、プロパティ ファイルからプロパティを見つけて使用しますが、コンテキスト XML ファイルからの値は使用しません。

この新しいプロパティ プレースホルダーを使用するときに、アプリケーションでコンテキスト パラメーターを使用するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

ユーザーベースのプロパティ ファイルが定義されていない限り、Spring はデフォルトのプロパティ ファイルを使用します。.properties ファイルを制御する場合は、ここに掲載されている手順に従ってください。

application.properties を利用するには、2 つの方法があります。

<!-- allows for ${} replacement in the spring xml configuration from the 
    system.properties file on the classpath -->
<util:properties id="appProperties" location="classpath:application.properties"/>
<context:property-placeholder location="classpath:application.properties"/>

util タグを使用すると、Property クラスを使用してアプリケーション全体のプロパティを読み取ることができます。例えば:

@Autowired
public MyPropertyReader(Properties appProperties) {
    String prop1 =  appProperties.getProperty("my.address");
    String prop2 =  appProperties.getProperty("my.version");
}

コンテキスト ファイル内の値を使用する場合は、context:property-placeholder タグを使用します。次に、値を次のように使用できます

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:brokerURL="${jms.primary.server}"/>

たとえば、application.properties の jms.primary.server=172.168.10.18:6161 です。

于 2013-07-15T05:41:11.057 に答える