`
百卉含英
  • 浏览: 26734 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PropertyPlaceholderConfigurer的使用

    博客分类:
  • SSH
阅读更多

    一、在Spring中,PropertyPlaceholderConfigurer主要是将配置属性值放到一个properties文件中,在xml文件中使用${key}替换properties文件中的值。

    通常数据库配置jdbc.properties就是这样配置的, eg:jdbc.properties如下:

jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
jdbc.username=admin
jdbc.password=123456

 在xml中引入该配置文件(单个配置文件)

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="locations">
		<value>jdbc.properties</value>
	</property>
	<property name="fileEncoding"><!--设置字符编码-->
	   <value>UTF-8</value>
    </property>
</bean>

然后就可以直接用${key}替换配置文件中的属性值

<bean id="dataSourceDefault" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>

  

在xml中引入该配置文件(多个配置文件)

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="locations">
		 <list>  
			<value>classpath:jdbc.properties</value>
			<value>classpath:inter.properties</value>
		 	<value>classpath:email.properties</value>
		 </list>
	</property>
</bean>

 当然也可以使用Spring中的<context:property-placeholder/>这种只能配置一个配置文件,如果需要配置多个需要用通配符:

 

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

 

    二、自定义PropertyPlaceholderConfigurer

    当java代码中使用了属性值,我们可以自定义PropertyPlaceholderConfigurer来获取属性值,不过当属性值变了,就需要重启容器。因为容器启动的时候,哪些属性值已经初始化了。note:对于不同环境,我们可以使用不同的属性前缀,从而在一定程度上满足因为环境不同导致属性值不一致的问题。代码示例如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class SpringPropertiesUtils extends PropertyPlaceholderConfigurer{

	private static Map<String, String> properties = new HashMap<>();
	//在解析一个占位符的变量的时候。假设不能获取到该变量的值。就会拿系统属性来尝试
	private int systemPropertiesModeName = SYSTEM_PROPERTIES_MODE_FALLBACK;
	
	
	@Override
	public void setSystemPropertiesMode(int systemPropertiesMode) {
		super.setSystemPropertiesMode(systemPropertiesMode);
		this.systemPropertiesModeName = systemPropertiesMode;
	}
	
	@Override
	protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
			throws BeansException {
		super.processProperties(beanFactory, props);
		for (Object key : props.keySet()) {
			String keyStr = key.toString();
			String value = resolvePlaceholder(keyStr, props, systemPropertiesModeName);
			properties.put(keyStr, value);
		}
		String env = System.getenv("APPLICATION_ENV");
		if (env != null) {
			properties.put("env", env);
		}
	}
	
	public static Object getProperty(String key) throws Exception{
		return properties.get(key);
	}
	
	public static String getStringProperty(String key) throws Exception{
		Object value = properties.get(key);
		if (value != null) {
			return String.valueOf(value);
		}
		return null;
	}

 在xml文件中配置如下:

	<bean id="configs" class="com.xxx.SpringPropertiesUtils">
		<property name="locations">
			<list>
	<value>classpath:config/wxconfig.properties</value>
	<value>classpath:config/project.properties</value>
	<value>classpath:conf.properties</value>
			</list>
		</property>
	</bean>

 这样在java代码中就可以直接通过getStringProperty(key)读取配置文件中的属性值。

分享到:
评论

相关推荐

    Spring中PropertyPlaceholderConfigurer的使用

    Spring 中 PropertyPlaceholderConfigurer 的使用 PropertyPlaceholderConfigurer 是 Spring 框架中的一个重要组件,用于加载和管理 Properties 文件。它能够将 Properties 文件中的键值对注入到 Spring 的 bean 中...

    Spring属性占位符PropertyPlaceholderConfigurer的使用

    下面我们将详细探讨`PropertyPlaceholderConfigurer`的工作原理、使用方法以及其在实际开发中的应用。 `PropertyPlaceholderConfigurer`是Spring提供的一个Bean工厂后处理器,它的主要任务是在Spring容器初始化Bean...

    Spring如何使用PropertyPlaceholderConfigurer读取文件

    Spring如何使用PropertyPlaceholderConfigurer读取文件 Spring框架中,PropertyPlaceholderConfigurer是一个非常重要的组件,它可以帮助我们读取配置文件,实现系统的配置信息统一管理。在大型项目中,我们往往会将...

    Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取

    以上就是关于"Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取"的详细解释,涵盖了Spring的配置处理、ZooKeeper的使用以及两者结合的实现过程。理解并掌握这一技术,有助于提升...

    spring-property-annotations:Spring 2.5.x 组件的带注释的配置属性

    #Spring 属性注释扩展的 PropertyPlaceHolderConfigurer 使用注解将配置属性注入到 Spring 组件中。 注意:Spring 3 现在支持使用 @Value 注释的容器的。 该项目仅用于 Spring 2.5.x 支持。 ##入门Spring房产注解...

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

    `spring1.docx`和`spring2.docx`可能是两份关于Spring框架的文档,可能包含了更多关于`PropertyPlaceholderConfigurer`的使用示例、最佳实践以及与其他Spring特性(如`@Value`注解、`@ConfigurationProperties`等)...

    SpringValue注解

    在上面的配置中,我们定义了一个名为 appProperty 的 Bean,该 Bean 使用 PropertyPlaceholderConfigurer 类来加载名为 config.properties 的 properties 文件。 使用 @Value 注解 在 Bean 中,可以使用 @Value ...

    spring使用属性文件

    下面将详细介绍如何在Spring中使用属性文件以及相关知识点。 1. **属性文件格式** 属性文件通常以`.properties`为扩展名,例如`application.properties`或`database.properties`。文件中的键值对以等号`=`分隔,如...

    关于spring系统中多系统的配置

    首先,来看一下如何使用`PropertyPlaceholderConfigurer`: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt; &lt;value&gt;classpath:/spring/include/dbQuery.properties...

    SPRING:bean配置properties

    当存在多个配置文件时,可以使用`locations`属性代替`location`,以列表形式指定多个文件路径。例如: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt; &lt;value&gt;...

    在Spring中使用加密外部属性文件

    Spring默认的`PropertyPlaceholderConfigurer`不直接支持加密的属性文件,但它提供了扩展点,允许我们自定义实现来处理加密后的属性。以下是一种实现方式: 1. 创建一个自定义的`PropertyPlaceholderConfigurer`...

    基于Spring2.0 Property Placeholder配置的源码例子

    这个例子“基于Spring 2.0 Property Placeholder配置的源码”展示了如何在应用程序中使用Property Placeholder来动态加载和替换配置文件中的属性值,从而实现配置的灵活性和可重用性。下面将详细介绍这个主题。 1. ...

    spring4.0引用properties

    接下来,为了在Spring 4.0中引用这些属性,我们需要配置一个`PropertyPlaceholderConfigurer`或使用`@ConfigurationProperties`注解。`PropertyPlaceholderConfigurer`是Spring早期版本中用于注入properties文件中值...

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

    在Spring框架中,有多种方法可以方便地读取和使用这些Properties文件中的内容。以下是一些主要的获取Properties的方法: 1. **通过PropertyPlaceholderConfigurer加载配置** Spring提供了`...

    JDBC Template源码.7z

    本文将深入探讨JDBC Template的源码,结合MySQL数据库,展示其在实际应用中的使用,并提及Spring框架中的`PropertyPlaceholderConfigurer`和`BeanPropertyRowMapper`组件。 首先,JDBC Template通过预编译SQL语句、...

    加载properties配置文件的几种方法

    1. **使用Spring的PropertyPlaceholderConfigurer** Spring提供了`PropertyPlaceholderConfigurer`类,可以方便地从.properties文件中读取属性。首先,在Spring的配置文件(如`applicationContext.xml`)中定义一个...

    SSM 读取properties文件

    在Java开发领域,尤其是SSM(Spring、SpringMVC、MyBatis)框架的使用中,配置文件的管理是至关重要的。"SSM 读取properties文件"这个话题聚焦于如何在项目中有效地读取和使用这些配置文件。properties文件通常用于...

    spring mybatis 3.x 使用图文

    且Spring配置文件中设置了`default-autowire="byName"`,那么在解析加载bean定义阶段,如果`dataSource`中使用了占位符,可能会导致提前初始化部分类,此时`PropertyPlaceholderConfigurer`尚未替换定义中的变量,...

    说说在Spring中如何引用外部属性文件的方法

    除了使用 PropertyPlaceholderConfigurer 之外,我们还可以使用 context 命名空间来定义属性文件,相对于 PropertyPlaceholderConfigurer 的配置方式,这种方式更优雅。 ``` file-encoding="utf-8"/&gt; ``` 在 ...

Global site tag (gtag.js) - Google Analytics