不同环境配置文件读取/不用项目间读取配置 spring读取占位符

  • Post author:
  • Post category:其他


项目中在



classpath下建立不同环境的properties文件,右侧选择的哪个profile则在classpath下生成的所有配置文件用到的环境配置中的值都是右侧指定的profile的环境配置文件的。如果右侧没有选择任何profile,则使用的是pom.xml中配置为true的 profile来生成classpath下的配置文件,如果都为false的话则使用外层<properties> 下的<env>dev</env>指定的来生成。优先级:右侧,里properties,外properties。

maven配置环境切换指定了某环境的基础.properties文件后,

spring项目

<context:property-placeholder

(给spring容器的所有xml使用)中所有的properties文件中的${}都能被基础propertie文件自动替换,但项目中的xml文件中的${}不能被任何.properties文件替换包括基础.properties文件,需要配置placeHolder来指定哪个配置文件properties去替换xml中的${}。指定过一次某个.properties文件去替换xml的${}的话你去掉placeHolder依然生效,估计是有缓存。logback.xml有时候能被替换有时候替换不了暂不详。

预发环境可以更改配置文件没错,但更改的是已生成的。不会更改非classpath下的profile的。其实他就是改了下配置文件然后重启了下应用而已,不建议这么改,会导致本地和预发文件不同步。



<context:property-placeholder>=替换+注入(必须有替换)



<context:property-placeholder>必须配置properties文件,


<loon-context:property不配置的话默认会加载所有properties


只有替换可以,只有注入不行

spring配置文件(xml文件,properties配置文件不能使用占位符)读取properties文件中的变量:在入口或第一个使用该配置文件的配置文件中配置都可以(引入的后续配置文件不用再配)

PropertySourcesPlaceholderConfigurer作用:(只是将占位符转为map的话不需配第二个bean注入)替换目标文件的占位符——将目标properties文件读取并生成key value的map集合

只是为了给xml中的占位符使用,xml的占位符未用到的话可以不配该.properties

也可使用标签来代替此bean:<context:property-placeholder(此标签附带PropertiesFactoryBean的功能,程序中可以读取properties配置文件的值)


<context:property-placeholder>

标签在Spring配置文件中只能存在一份(当然标签和bean声明也只能用一个不能两个都要)!!!Spring容器是采用反射扫描的发现机制,通过标签的命名空间实例化实例,当Spring探测到容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer的Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描,即只能存在一个实例。<context:property-placeholderlocation=”classpath:db.properties,classpath:monitor.properties” />

<!-- 属性文件读入 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:common.properties</value>
            <value>classpath:important.properties</value>
        </list>
    </property>
</bean>

<bean id="jdBankpro"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:jdbank.properties"/>
    <property name="fileEncoding" value="UTF-8"></property>
</bean>

PropertiesFactoryBean的作用:将上一步转换成的hashmap注入到spring容器中(代码中还需使用@value获取)。

在PropertySourcesPlaceholderConfigurer的基础上,将.properties配置文件注入到了spring容器中,在程序中可以获取到值。(切记基础是上面的PropertySourcesPlaceholderConfigurer的声明)

不用项目间读取配置:

只要有依赖关系,被依赖的项目也可以反过来去读取其他项目的配置文件

ApplicationContext context = new ClassPathXmlApplicationContext("/jimclient.xml");service读取webapp的
CLIENT_INSTANCE = (Cluster)context.getBean("jimClientHC");

profile下多个环境配置可以建在resources下也可以建在main包下,maven配好即可读取。若不是被maven读取的配置文件,必须建在resopurces下才能被<context:property-placeholder去配置读取。且@Value注解的使用基础也是配置上标<context:property-placeholder

<context:property-placeholder配置的properties可以和maven指定加载的prpperties通过app.env连接起来:app.env=${app.env}app.env=local



版权声明:本文为u010287873原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。