Spring应用程序上下文外部属性

时间:2011-11-25 14:10:15

标签: spring properties

我有一个Spring应用程序,它到目前为止运行良好。现在我希望属性文件在外部配置文件夹中,而不是在打包的jar中更改内容而无需重新打包。这就是我得到的:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- <property name="locations" value="classpath:/springcontext.properties"/>  -->
<property name="locations" value ="config/springcontext.properties" />

已经取消评估的一个正在工作,而另一个我没有工作:/有人可以帮忙吗?

编辑: 到目前为止有4条评论。

也许我的问题不够清楚:)。我执行一个Maven构建,一切都将打包,我希望这个文件夹不在outcomming jar旁边的包装螺母中,在这个文件夹中我想要属性文件。可能的?

7 个答案:

答案 0 :(得分:47)

您可以尝试这样的事情:

<context:property-placeholder 
        location="${ext.properties.dir:classpath:}/servlet.properties" />

在应用程序服务器/ jvm中定义ext.properties.dir属性,否则将使用默认属性位置“classpath:/”(即.jar或.war的类目录):

-Dext.properties.dir=file:/usr/local/etc/

BTW,非常有用blog post

答案 1 :(得分:12)

您可以使用文件前缀来加载外部应用程序上下文文件,例如

  <context:property-placeholder location="file:///C:/Applications/external/external.properties"/>

答案 2 :(得分:11)

<context:property-placeholder location="classpath*:spring/*.properties" />

如果将它放在类路径中名为spring的目录中的某个位置(相应地更改名称/目录),则可以使用上面的

进行访问
<property name="locations" value ="config/springcontext.properties" />

这将指向web-inf / classes / config / springcontext.properties

答案 3 :(得分:10)

This博客可以为您提供帮助。诀窍是使用SpEL(spring表达式语言)来读取像user.home这样的系统属性,使用SpEL读取用户主目录,你可以在bean元素中使用
#{ systemProperties['user.home']}表达式。例如,要访问存储在主目录中的属性文件,可以在PropertyPlaceholderConfigurer中使用以下内容,它对我有用。

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:#{ systemProperties['user.home']}/ur_folder/settings.properties</value>
    </property>
</bean>

答案 4 :(得分:6)

这个问题有点陈旧,但想分享一些对我有用的东西。希望它对那些正在搜索访问外部位置属性的信息的人有用。

这对我有用。

  1. 属性文件内容:

       
    PROVIDER_URL=t3://localhost:8003,localhost:8004
    
  2. applicationContext.xml文件内容:(春季3.2.3)

    注意:${user.home}是OS的系统属性。

    <context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/>
    
    <bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                <prop key="java.naming.provider.url">${PROVIDER_URL}</prop>
            </props>
        </property>
    </bean>
    
  3. ${PROVIDER_URL}被替换为文件

    属性中的值

答案 5 :(得分:2)

一种方法是将外部配置文件夹添加到java进程的类路径中。这就是我过去经常这样做的方式。

答案 6 :(得分:1)

<context:property-placeholder location="file:/apps/tomcat/ath/ath_conf/pcr.application.properties" />

这对我有用。 本地开发机器路径是C:\ apps \ tomcat \ ath \ _ ath_conf和server / apps / tomcat / ath / ath_conf

两者都适合我