一、在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 的使用 PropertyPlaceholderConfigurer 是 Spring 框架中的一个重要组件,用于加载和管理 Properties 文件。它能够将 Properties 文件中的键值对注入到 Spring 的 bean 中...
下面我们将详细探讨`PropertyPlaceholderConfigurer`的工作原理、使用方法以及其在实际开发中的应用。 `PropertyPlaceholderConfigurer`是Spring提供的一个Bean工厂后处理器,它的主要任务是在Spring容器初始化Bean...
Spring如何使用PropertyPlaceholderConfigurer读取文件 Spring框架中,PropertyPlaceholderConfigurer是一个非常重要的组件,它可以帮助我们读取配置文件,实现系统的配置信息统一管理。在大型项目中,我们往往会将...
以上就是关于"Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取"的详细解释,涵盖了Spring的配置处理、ZooKeeper的使用以及两者结合的实现过程。理解并掌握这一技术,有助于提升...
#Spring 属性注释扩展的 PropertyPlaceHolderConfigurer 使用注解将配置属性注入到 Spring 组件中。 注意:Spring 3 现在支持使用 @Value 注释的容器的。 该项目仅用于 Spring 2.5.x 支持。 ##入门Spring房产注解...
`spring1.docx`和`spring2.docx`可能是两份关于Spring框架的文档,可能包含了更多关于`PropertyPlaceholderConfigurer`的使用示例、最佳实践以及与其他Spring特性(如`@Value`注解、`@ConfigurationProperties`等)...
在上面的配置中,我们定义了一个名为 appProperty 的 Bean,该 Bean 使用 PropertyPlaceholderConfigurer 类来加载名为 config.properties 的 properties 文件。 使用 @Value 注解 在 Bean 中,可以使用 @Value ...
下面将详细介绍如何在Spring中使用属性文件以及相关知识点。 1. **属性文件格式** 属性文件通常以`.properties`为扩展名,例如`application.properties`或`database.properties`。文件中的键值对以等号`=`分隔,如...
首先,来看一下如何使用`PropertyPlaceholderConfigurer`: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:/spring/include/dbQuery.properties...
当存在多个配置文件时,可以使用`locations`属性代替`location`,以列表形式指定多个文件路径。例如: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>...
Spring默认的`PropertyPlaceholderConfigurer`不直接支持加密的属性文件,但它提供了扩展点,允许我们自定义实现来处理加密后的属性。以下是一种实现方式: 1. 创建一个自定义的`PropertyPlaceholderConfigurer`...
这个例子“基于Spring 2.0 Property Placeholder配置的源码”展示了如何在应用程序中使用Property Placeholder来动态加载和替换配置文件中的属性值,从而实现配置的灵活性和可重用性。下面将详细介绍这个主题。 1. ...
接下来,为了在Spring 4.0中引用这些属性,我们需要配置一个`PropertyPlaceholderConfigurer`或使用`@ConfigurationProperties`注解。`PropertyPlaceholderConfigurer`是Spring早期版本中用于注入properties文件中值...
在Spring框架中,有多种方法可以方便地读取和使用这些Properties文件中的内容。以下是一些主要的获取Properties的方法: 1. **通过PropertyPlaceholderConfigurer加载配置** Spring提供了`...
本文将深入探讨JDBC Template的源码,结合MySQL数据库,展示其在实际应用中的使用,并提及Spring框架中的`PropertyPlaceholderConfigurer`和`BeanPropertyRowMapper`组件。 首先,JDBC Template通过预编译SQL语句、...
1. **使用Spring的PropertyPlaceholderConfigurer** Spring提供了`PropertyPlaceholderConfigurer`类,可以方便地从.properties文件中读取属性。首先,在Spring的配置文件(如`applicationContext.xml`)中定义一个...
在Java开发领域,尤其是SSM(Spring、SpringMVC、MyBatis)框架的使用中,配置文件的管理是至关重要的。"SSM 读取properties文件"这个话题聚焦于如何在项目中有效地读取和使用这些配置文件。properties文件通常用于...
且Spring配置文件中设置了`default-autowire="byName"`,那么在解析加载bean定义阶段,如果`dataSource`中使用了占位符,可能会导致提前初始化部分类,此时`PropertyPlaceholderConfigurer`尚未替换定义中的变量,...
除了使用 PropertyPlaceholderConfigurer 之外,我们还可以使用 context 命名空间来定义属性文件,相对于 PropertyPlaceholderConfigurer 的配置方式,这种方式更优雅。 ``` file-encoding="utf-8"/> ``` 在 ...