使用场景:使用dubbo服务,对应了dev,test,prod等环境的配置文件,如:filter-dev.properties,filter-test.properties,filter-prod.properties.不同的properties里面对于同一个变量需要有不同的配置,比如我设定了每日短信发送条数上线:sms.limit.count=20000
接手的是老代码,对应配置的调用有两种方式,
一种是在xml文件中声明一个对PropertyPlaceholderConfigurer的继承类PropertiesLoader
<bean id="propertyPlaceholderConfigurer" class="com.artist.common.utils.PropertiesLoader">
<property name="location">
<value>classpath:env/filter-${environment}.properties</value>
</property>
</bean>
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.artist.common.utils;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
public class PropertiesLoader extends PropertyPlaceholderConfigurer {
private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class);
private static Map<String, String> propertyMap;
public PropertiesLoader() {
}
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
super.processProperties(beanFactoryToProcess, props);
propertyMap = new HashMap();
Iterator var3 = props.keySet().iterator();
while(var3.hasNext()) {
Object key = var3.next();
String keyStr = key.toString();
String value = props.getProperty(keyStr);
propertyMap.put(keyStr, value);
}
}
public static String getValue(String key) {
String systemProperty = System.getProperty(key);
return systemProperty != null?systemProperty:(String)propertyMap.get(key);
}
public String getProperty(String key) {
String value = getValue(key);
if(value == null) {
throw new NoSuchElementException();
} else {
return value;
}
}
public String getProperty(String key, String defaultValue) {
String value = getValue(key);
return value != null?value:defaultValue;
}
public static Integer getInteger(String key) {
String value = getValue(key);
if(value == null) {
throw new NoSuchElementException();
} else {
return Integer.valueOf(value);
}
}
public static Integer getInteger(String key, Integer defaultValue) {
String value = getValue(key);
return value != null?Integer.valueOf(value):defaultValue;
}
public static Double getDouble(String key) {
String value = getValue(key);
if(value == null) {
throw new NoSuchElementException();
} else {
return Double.valueOf(value);
}
}
public static Double getDouble(String key, Integer defaultValue) {
String value = getValue(key);
return Double.valueOf(value != null?Double.valueOf(value).doubleValue():(double)defaultValue.intValue());
}
public static Boolean getBoolean(String key) {
String value = getValue(key);
if(value == null) {
throw new NoSuchElementException();
} else {
return Boolean.valueOf(value);
}
}
public static Boolean getBoolean(String key, boolean defaultValue) {
String value = getValue(key);
return Boolean.valueOf(value != null?Boolean.valueOf(value).booleanValue():defaultValue);
}
}
java调用:private static String SMSLIMITCOUNT= PropertiesLoader.getValue("sms.limit.count");
一种是用spring的@Value 比如
@Value("${sms.limit.count}")
String smsLimitCount;
在xml配置文件中声明properties:
<context:property-placeholder location="classpath:config/application.properties,classpath:env/filter-${environment}.properties"/>
相比之下,第二种方法比较简单,只是之前写的人写法是这样的:
<context:property-placeholder location="classpath:config/application.properties"/>
<context:property-placeholder location="classpath:env/filter-${environment}.properties"/>
这种写法导致evn/filter-${enviroment}.properties里面的配置文件项在java中找不到,在xml配置文件里是可以的
分享到:
相关推荐
### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...
7. **使用Properties类的其他方法** `Properties`类还提供了其他方法,如`propertyNames()`用于获取所有键的枚举,`list(PrintStream out)`用于打印所有键值对到控制台,以及`keys()`和`values()`方法分别获取所有...
在Java编程中,Properties文件是用于存储配置信息的文本文件,通常以.key=value的形式组织。当我们需要在程序运行时修改这些键值对,可以使用Java的Properties类来实现。以下是一些关于如何在Java中改变Properties...
在Java编程中,`properties`文件是一种常用的存储配置信息的方式,它以键值对的形式组织数据,便于程序在运行时动态获取和修改配置。本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`...
在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值可以是任意字符串。然而,当这些文件中包含中文字符时,如果不正确地处理编码,可能会出现中文乱码的问题。本文将深入探讨...
Java Properties文件是Java编程语言中用于存储配置信息的文本文件,通常以.properties为扩展名。这类文件的内容主要是键值对,广泛应用于各种配置场景,如应用程序的设置、国际化(i18n)文本等。然而,由于历史原因...
删除properties配置文件中的键值对** 1.4.1 删除键值对并不直接在`Properties`对象中进行,而是通过修改后重新写入文件来实现。例如,要删除键为"age"的键值对,可以设置其值为`null`,然后保存到文件。 ```java ...
在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值之间用等号(=)或冒号(:)分隔。当我们需要处理包含中文键的Properties文件时,可能会遇到编码问题,因为默认的ISO-8859-1...
在Java编程中,读取`.properties`配置文件是常见的任务,这些文件通常用于存储应用程序的配置参数、系统设置等信息。下面将详细介绍几种在Java中读取`.properties`配置文件的方法。 1. 使用`java.util.Properties`...
在Java编程中,Properties文件是一种常用的配置文件格式,用于存储应用程序的配置参数或者环境设置。这些文件通常以键值对的形式存在,例如`key=value`。读取Properties文件是Java开发中的常见操作,特别是在需要...
在Java编程中,Properties文件是用于存储配置信息的文本文件,通常以键值对的形式存在。这些文件在程序运行时可以被加载并解析,以便应用根据配置内容进行动态行为调整。本篇将深入探讨如何使用Java来实现Properties...
在Java编程中,`.properties`文件是用于存储配置信息的标准格式,这些信息通常包含应用程序运行时所需的设置。`.properties`文件以键值对的形式组织,其中键和值由等号分隔,例如`key=value`。Java提供了内置的`...
在Java编程中,操作配置文件,尤其是`.properties`文件,是一项常见的任务。`.properties`文件主要用于存储应用程序的配置信息,通常包含键值对,其中键是唯一的标识符,值是与该键相关联的数据。Java提供了`java....
Java中的`.properties`文件是用于存储配置信息和国际化(i18n)资源的关键组件。这些文件通常包含键值对,其中键代表消息或文本标识,值是与该键关联的本地化字符串。在处理中文内容时,由于字符编码的问题,可能会...
在Java编程中,Properties类是处理配置文件的关键工具,它用于加载、存储键值对,这些键值对常被用于程序的配置。然而,当我们读取一个Properties文件并再次保存时,原始的格式可能会发生变化,比如注释丢失、行顺序...
在Java编程中,读取`properties`文件是常见的任务,用于存储配置信息或者系统设置。以下将详细讲解六种不同的方法来实现这一功能。 1. **使用Properties类** Java的标准库提供了`java.util.Properties`类,它是...
Java Properties 类是Java标准库中用于处理配置文件的关键组件,主要负责存储和加载键值对数据,常用于管理应用程序的配置信息。配置文件通常以`.properties`为扩展名,采用文本格式,每行包含一个键值对,键和值...
下面将详细介绍如何使用Properties类进行配置文件的操作。 1. **加载Properties文件** 要加载.properties文件,我们需要创建一个InputStream对象,然后调用Properties类的`load()`方法。例如: ```java ...
在Python编程中,有时我们需要处理Java开发中常用的`.properties`配置文件。虽然Python标准库并未直接提供处理此类文件的模块,但我们可以自定义一个类来实现这个功能。本篇文章将详细探讨如何通过Python来读取并...
在Java编程中,`properties`文件是一种常用的配置文件格式,用于存储应用的配置参数或设置。这些文件通常以键值对的形式存在,如`key=value`。本篇将详细讲解如何在Java中读取`properties`文件并将其内容转换为`Map`...