当前位置 主页 > 网站技术 > 代码类 >

    Spring如何使用PropertyPlaceholderConfigurer读取文件

    栏目:代码类 时间:2019-12-10 12:08

    这篇文章主要介绍了Spring如何使用PropertyPlaceholderConfigurer读取文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    一. 简介

    大型项目中,我们往往会对我们的系统的配置信息进行统一管理,一般做法是将配置信息配置与一个cfg.properties 的文件中,然后在我们系统初始化的时候,系统自动读取 cfg.properties 配置文件中的 key value(键值对),然后对我们系统进行定制的初始化。

    那么一般情况下,我们使用 的 java.util.Properties, 也就是 java 自带的。往往有一个问题是,每一次加载的时候,我们都需要手工的去读取这个配置文件,一来编码麻烦,二来代码不优雅,往往我们也会自己创建一个类来专门读取,并储存这些配置信息。

    对于 web 项目来说,可以通过相对路径得到配置文件的路径,而对于可执行项目,在团队开发中就需要根据各自的环境来指定 properties 配置文件的路径了。对于这种情况可以将配置文件的路径放在 java 虚拟机 JVM 的自定义变量(运行时参数)中,例如:-Ddev.config=/dev.properties 寻找的是本机根目录下

    Spring中提供着一个 PropertyPlaceholderConfigurer,这个类是 BeanFactoryPostProcessor 的子类。其主要的原理在是。Spring容器初始化的时候,会读取 xml 或者 annotation 对 Bean 进行初始化。初始化的时候,这个 PropertyPlaceholderConfigurer 会拦截 Bean 的初始化,初始化的时候会对配置的 ${pname} 进行替换,根据我们 Properties 中配置的进行替换。从而实现表达式的替换操作 。

    二. XML 方式

    方式1

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <!-- 对于读取一个配置文件采取的方案 -->
        <!--<property name="location" value="classpath:db.properties"/>-->
    
        <!--对于读取多个配置文件采取的方案-->
        <property name="locations">
          <list>
            <value>classpath:db.properties</value>
            <value>classpath:db2.properties</value>
          </list>
        </property>
      </bean>
    </beans>
    #db.properties 
    jdbc.driverClass==net.sourceforge.jtds.jdbc.Driver 
    jdbc.url=jdbc:mysql://localhost:3306/test? 
    jdbc.username=anqi 
    jdbc.password=123456 
    #db2.properties 
    name=anqi 
    age=23 
    import org.junit.Test; import org.junit.runner.RunWith; 
    import org.springframework.beans.factory.annotation.Value; 
    import org.springframework.test.context.ContextConfiguration; 
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
    
    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration("classpath:spring-context.xml") 
    public class TestPropertyPlaceHoder2 {   
     @Value("${jdbc.username}")   
     private String username;   
     @Value("${jdbc.password}")   
     private String password;   
     @Value("${name}")   
     private String name;   
     @Value("${age}")   
     private int age;   
     
     @Test   
     public void testResource() {     
      System.out.println("username: " + username);     
      System.out.println("password: " + password);     
      System.out.println("name: " + name);     
      System.out.println("age: " + age);   
     } 
    } 
    /* username: anqi   password: 123456   name: anqi   age: 23 */