首页 > 网站 > 帮助中心 > 正文

Spring如何使用PropertyPlaceholderConfigurer读取文件

2024-07-09 22:42:35
字体:
来源:转载
供稿:网友

这篇文章主要介绍了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 */ 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表