0

我的应用程序在带有 Spring 2.5.6、Richfaces 3.1.6.SR1、JSF 1.1_02 的 Jboss 4.2.2 GA 上运行。我想要的是在我耳边有一个包含 s.th 的 porpertie 文件。喜欢

  • 信息1="乔伊"
  • 信息2 =“迪迪”
  • 信息3 =“马克”
  • [...]

对此文件的更改应该会立即产生影响。我是这样开始的:

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

[...]

PropertiesConfiguration configure = null;
{
try {
        configure = new PropertiesConfiguration("myProperties.properties");
        configure.setReloadingStrategy(new FileChangedReloadingStrategy());
        configure.setAutoSave(true);

    } catch (ConfigurationException e) {
        e.printStackTrace();
    }
}

这似乎只有在 myProperties.properties 位于我耳内目标目录中的某个位置时才有效。所以我改变了我的代码:

File file = new File(myAppRoot + FSEP + "appserver" + FSEP + "server" + FSEP +   "default"
                                + FSEP + "conf" + FSEP + "myApp" + FSEP + "myProperties.properties");
configure = new PropertiesConfiguration(file);
configure.setReloadingStrategy(new FileChangedReloadingStrategy());
configure.setAutoSave(true);

这工作正常。但我想避免使用绝对路径。我已经定义了一个

<bean id="myPropertyConfigurer"    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
[...]
<property name="locations">
  <list>
    <value>classpath:myProperties.properties</value>
    <value>classpath:myApp/myProperties.properties</value>
  </list>
</property>
4

1 回答 1

0

您可以在启动程序的 java 中添加一些 -D 选项。例如:

java ... -DjdbcPropsLocation=%YOUR_PROPERTIES_LOCATION% -DcustomInternalPropsLocation=%SOME_OTHER_PROPS_FILE_LOCATION% ...

然后在您的应用程序上下文中使用此选项,如下所示:(请注意,存储在文件 internal.properties 中的属性正在通过使用最后一个重载获胜的不同位置进行重载,因此顺序很重要。)

    <bean id="propsLocations" class="java.util.ArrayList" >
    <constructor-arg>
        <list>
            <value>classpath:jdbc.properties</value>
            <value>${jdbcPropsLocation}\jdbc.properties</value>
            <!-- loading the default internal properties -->
            <value>classpath:internal.properties</value>
            <!-- loading the meta-data.properties -->
            <value>classpath:meta-data.properties</value>
            <!-- overloading the internal properties with custom values -->
            <value>${customInternalPropsLocation}\internal.properties</value>
        </list>
    </constructor-arg>
</bean>


<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" >
        <list>
            <!-- <value>classpath:${jdbcPropsLocation}/jdbc.properties</value> -->
            <value>classpath:jdbc.properties</value>
            <value>${jdbcPropsLocation}\jdbc.properties</value>
            <!-- loading the default internal properties -->
            <value>classpath:internal.properties</value>
            <!-- loading the meta-data.properties -->
            <value>classpath:meta-data.properties</value>
            <!-- overloading the internal properties with custom values -->
            <value>${customInternalPropsLocation}\internal.properties</value>
        </list>
    </property>
</bean>

或者,您可以在加载使用您的属性的应用程序上下文之前从您的代码中设置系统属性 (-D):

System.setProperty(CUSTOM_INTERNAL_PROPS_LOCATION_PROP_KEY, CUSTOM_INTERNAL_PROPS_LOCATION_PROP_VAL);
于 2012-02-10T08:29:45.527 回答