`

Spring配置文件<context:property-placeholder>标签使用漫谈

阅读更多

<context:property-placeholder>标签提供了一种优雅的外在化参数配置的方式,不过该标签在Spring配置文件中只能存在一份!!!

了解springcloud架构可以加求求:三五三六二四七二五九

众所周知,Spring容器是采用反射扫描的发现机制,通过标签的命名空间实例化实例,当Spring探测到容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer的Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描,即只能存在一个实例!

<context:property-placeholder   
        location=""  
        file-encoding=""  
        ignore-resource-not-found=""  
        ignore-unresolvable=""  
        properties-ref=""  
        local-override=""  
        system-properties-mode=""  
        order=""  
/>

 location:表示属性文件位置,多个之间通过如逗号/分号等分隔; 

file-encoding:文件编码; 
ignore-resource-not-found:如果属性文件找不到,是否忽略,默认false,即不忽略,找不到将抛出异常 
ignore-unresolvable:是否忽略解析不到的属性,如果不忽略,找不到将抛出异常 
properties-ref:本地java.util.Properties配置 
local-override:是否本地覆盖模式,即如果true,那么properties-ref的属性将覆盖location加载的属性 
system-properties-mode:系统属性模式,ENVIRONMENT(默认),NEVER,OVERRIDE 
ENVIRONMENT:将使用Spring 3.1提供的PropertySourcesPlaceholderConfigurer,其他情况使用Spring 3.1之前的PropertyPlaceholderConfigurer 
OVERRIDE: PropertyPlaceholderConfigurer使用,因为在spring 3.1之前版本是没有Enviroment的,所以OVERRIDE是spring 3.1之前版本的Environment 
NEVER:只查找properties-ref、location; 
order:当配置多个<context:property-placeholder/>时的查找顺序

使用注意: 
1.location中的加载文件的顺序 
如果location中有多个文件: 
classpath:db.properties,classpath:default.properties,classpath:default3.properties,classpath:default2.properties 
将依次加载,值得注意的是如果后一个文件中有和前面某一个文件中属性名是相同的,最终取的值是后加载的值 
举例来说: 
default.properties文件中有个属性名userId,其对应的值为-1 
default2.properties文件中也有一个属性名userId,其对应的值为-2 
default3.properties文件中特有一个属性名userId,其对于那个的值为-3

default.properties文件先加载,此时userId的值为-1,当default3.properties文件加载时将更新原来的值,此时userId的值为-3,同理,最后加载default2.properties文件,所以userId最终值为-2 
所以需要避免不同属性文件中的属性名称重名

2.ignore-resource-not-found和ignore-unresolvable两个属性是类似的作用,推荐配对使用 
如果location中的文件指向了一个不存在的文件,那么也极有可能意味着有属性无法解析(虽然存在其他属性文件中存在重名,但是这个是应该避免的) 
所以当ignore-resource-not-found设为true时,ignore-unresolvable也必须设为true,其实当ignore-unresolvable设为true时,ignore-resource-not-found的值true或false,并不影响异常的抛出 
如果设置为ture,后属性值无法解析成功,将赋值为${属性名} 
不推荐将ignore-resource-not-found和ignore-unresolvable的值设置为ture,默认为false,可以有效避免程序运行异常

3.properties-ref属性 
引入其他方式引入的属性文件

<bean id="refProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:default2.properties</value>
        </list>
    </property>
</bean>

 该属性需要local-override配合使用,只有当local-override属性值为true时,properties-ref属性文件中属性值将覆盖location属性文件属性值(同名属性)

4.local-override属性 
当local-override属性值为true时,properties-ref属性文件中属性值将覆盖location属性文件属性值(同名属性)

5.sytem-properties-mode属性 
不同的sytem-properties-mode属性定义了不同的查找顺序 
Environment环境:包括JDK环境,系统环境变量,Sevlet环境,Spring环境等,是Spring在3.1之后抽象的一个表示环境配置

在local-override属性值为false,sytem-properties-mode属性值为ENVIRONMENT或OVRRIDE时,查找顺序是location,然后是environment或者System.getProperty(),System.getenv()(Spring 3.1 之前) 
即现加载location指向的属性文件,再加之environment指向的环境,当environment环境中存在和location指向的属性文件中同名的属性,则该属性的值将被修改,取决于environment环境中的值 
如果sytem-properties-mode属性值为NEVER,则只查询location指向的属性文件

当local-override属性值为true时,最后将加载properties-ref指向的文件,如遇到同名的,该同名属性值将取决于properties-ref指向的文件中的值

 

分享到:
评论

相关推荐

    context:property-placeholder 和util:properties

    context:property-placeholder 和util:properties 博客:https://blog.csdn.net/u010476739/article/details/76735527

    Spring整合Mybatis使用&lt;context:property-placeholder&gt;时的坑

    通常,如果你在配置文件中使用了相同的`&lt;context:property-placeholder&gt;`标签,Spring只会加载一次属性文件,而不会针对每个数据源重新加载。因此,${jdbc.url}等属性可能只被解析了一次,而不是按照每个数据源分别...

    SSH笔记-通过property-placeholder使用外部属性文件

    在Spring框架中,`&lt;context:property-placeholder&gt;`是用于加载和解析属性文件的一个标签,它允许我们在XML配置或Java配置中使用占位符 `${...}` 来引用属性文件中的值。这样做的好处是,我们可以将敏感信息如数据库...

    集成springmvc spring hibernate的配置

    使用`context:property-placeholder`标签将属性文件加载到Spring上下文中。然后,配置数据源`dataSource`,例如使用Apache Commons DBCP库: ```xml &lt;context:property-placeholder location="classpath:jdbc....

    spring-framework-3.2.0.RC2-schema.zip

    `context`命名空间下的 `&lt;context:component-scan&gt;`、`&lt;context:property-placeholder&gt;`等元素,用于扫描组件、加载外部属性文件,增强了Spring的应用范围和灵活性。 "cache"模块则提供了缓存抽象,支持如 EhCache...

    第十章 Spring 配置元信息(Configuration Metadata)1

    7. **基于Properties和YAML文件装载外部化配置**:`&lt;context:property-placeholder&gt;`和`&lt;context:property-override&gt;`用于加载和覆盖属性值,而YAML文件提供了更友好的格式来组织配置数据。 8. **基于Extensible ...

    spring3.0的xsd文件.rar

    此外,`&lt;context:property-placeholder&gt;`则可以用来加载属性文件,方便在配置中引用环境变量。 Spring 3.0引入了AOP(Aspect-Oriented Programming,面向切面编程)的增强,`aop.xsd`定义了与切面相关的配置元素,...

    spring,配置文件从属性文件读取JDBC连接的相关参数

    接下来,在Spring的`applicationContext.xml`配置文件中,我们使用`&lt;context:property-placeholder&gt;`标签来加载属性文件,并声明数据源bean。这个标签会自动替换XML配置文件中的占位符(以`${}`包裹)为属性文件中的...

    java 获取properties的几种方式(csdn)————程序.pdf

    2. **使用&lt;context:property-placeholder&gt;标签加载多个配置文件** 如果需要引入多个Properties文件,可以使用`&lt;context:property-placeholder&gt;`标签,指定多个`location`: ```xml &lt;context:property-placeholder...

    Spring中property-placeholder的使用与解析详解

    我们可以使用 `&lt;context:property-placeholder&gt;` 元素来加载 properties 文件,并将其配置信息注入到 bean 中。 PropertySource 注解配置 从 Spring 3.1 开始,我们可以使用 `@PropertySource` 注解来配置 ...

    spring约束

    3. ** Context `.xsd`**:扩展了基本的Bean配置,引入了上下文相关的功能,如`&lt;context:component-scan&gt;`用于自动发现和注册bean,以及`&lt;context:property-placeholder&gt;`用于处理属性占位符。 4. ** JDBC `.xsd`**...

    struts2.3+hibernate3.6+spring3.1整合的纯xml配置的小项目

    &lt;context:property-placeholder location="classpath:jdbc.properties" /&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; &lt;property name...

    引入多个properties时.txt

    在`applicationContext.xml`中通过`&lt;context:property-placeholder&gt;`标签来指定`properties`文件的位置。例如,我们需要引入两个文件:`jdbc.properties`和`res.properties`,可以这样配置: ```xml &lt;!-- 引入 jdbc...

    Spring 3.1配置文件示例(备忘)

    例如,通过 `&lt;context:property-placeholder&gt;` 可以加载属性文件: ```xml &lt;context:property-placeholder location="classpath:database.properties"/&gt; ``` 综上所述,`applicationContext.xml` 在 Spring 3.1 中...

    spring4-hibernate4-struts2整合

    &lt;context:property-placeholder location="classpath:config.properties"/&gt; &lt;!-- 自动扫描dao和service包 --&gt; &lt;context:component-scan base-package="me.gacl.dao,me.gacl.service"/&gt; &lt;/beans&gt; ``` 4. **...

    17 Spring IoC容器如何读取多个属性文件或者配置文件?慕课专栏(1)1

    在Spring的老版本中,通常使用`&lt;context:property-placeholder&gt;`或`&lt;util:properties&gt;`元素来加载属性文件。例如: ```xml &lt;!-- 使用 context:property-placeholder --&gt; &lt;beans xmlns=...

    spring3.0 xsd文件

    8. `&lt;context:property-placeholder&gt;`:加载属性文件,使你可以在配置中使用占位符 `${...}`。 9. `&lt;import&gt;`:引入其他XML配置文件,允许配置模块化。 10. `&lt;bean&gt;`的`init-method`和`destroy-method`属性:指定...

    spring与mybatis整合配置文档

    首先,在Spring配置文件中,通过`&lt;context:component-scan&gt;`标签定义了组件扫描的基包为`com.liao`,并排除了带有`@Controller`注解的类,这意味着该扫描主要用于扫描服务层等非控制器组件。 ```xml &lt;context:...

    ssm 框架配置

    &lt;context:property-placeholder location="classpath:db.properties"/&gt; &lt;!-- 配置数据源 --&gt; &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"&gt; &lt;property name="driverClassName" value...

    SSM框架笔记

    - `&lt;context:property-placeholder&gt;`: 引用外部属性文件。 - `&lt;mvc:resources&gt;`: 配置静态资源路径。 - `&lt;tx:advice&gt;`: 配置事务通知。 - `&lt;tx:annotation-driven&gt;`: 开启基于注解的事务管理。 - `&lt;tx:jta-...

Global site tag (gtag.js) - Google Analytics