`
lvxing607
  • 浏览: 78991 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java调用properties中的配置

 
阅读更多
使用场景:使用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配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...

    利用Java的Properties 类读取配置文件信息

    7. **使用Properties类的其他方法** `Properties`类还提供了其他方法,如`propertyNames()`用于获取所有键的枚举,`list(PrintStream out)`用于打印所有键值对到控制台,以及`keys()`和`values()`方法分别获取所有...

    java 改变Properties文件中的键值

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常以.key=value的形式组织。当我们需要在程序运行时修改这些键值对,可以使用Java的Properties类来实现。以下是一些关于如何在Java中改变Properties...

    java读取properties配置文件

    在Java编程中,`properties`文件是一种常用的存储配置信息的方式,它以键值对的形式组织数据,便于程序在运行时动态获取和修改配置。本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`...

    JAVA 解决Properties文件保存中文乱码

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值可以是任意字符串。然而,当这些文件中包含中文字符时,如果不正确地处理编码,可能会出现中文乱码的问题。本文将深入探讨...

    java properties文件中文转化

    Java Properties文件是Java编程语言中用于存储配置信息的文本文件,通常以.properties为扩展名。这类文件的内容主要是键值对,广泛应用于各种配置场景,如应用程序的设置、国际化(i18n)文本等。然而,由于历史原因...

    java对properties配置文件的读和写

    删除properties配置文件中的键值对** 1.4.1 删除键值对并不直接在`Properties`对象中进行,而是通过修改后重新写入文件来实现。例如,要删除键为"age"的键值对,可以设置其值为`null`,然后保存到文件。 ```java ...

    Java读取含中文key的properties文件

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值之间用等号(=)或冒号(:)分隔。当我们需要处理包含中文键的Properties文件时,可能会遇到编码问题,因为默认的ISO-8859-1...

    java读取.properties配置文件的几种方法

    在Java编程中,读取`.properties`配置文件是常见的任务,这些文件通常用于存储应用程序的配置参数、系统设置等信息。下面将详细介绍几种在Java中读取`.properties`配置文件的方法。 1. 使用`java.util.Properties`...

    java 读取properties文件代码

    在Java编程中,Properties文件是一种常用的配置文件格式,用于存储应用程序的配置参数或者环境设置。这些文件通常以键值对的形式存在,例如`key=value`。读取Properties文件是Java开发中的常见操作,特别是在需要...

    java实现properties文件读取

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常以键值对的形式存在。这些文件在程序运行时可以被加载并解析,以便应用根据配置内容进行动态行为调整。本篇将深入探讨如何使用Java来实现Properties...

    java读取.properties配置信息

    在Java编程中,`.properties`文件是用于存储配置信息的标准格式,这些信息通常包含应用程序运行时所需的设置。`.properties`文件以键值对的形式组织,其中键和值由等号分隔,例如`key=value`。Java提供了内置的`...

    java操作properties方法

    在Java编程中,操作配置文件,尤其是`.properties`文件,是一项常见的任务。`.properties`文件主要用于存储应用程序的配置信息,通常包含键值对,其中键是唯一的标识符,值是与该键相关联的数据。Java提供了`java....

    Java .properties中文资源批量转换工具和用法

    Java中的`.properties`文件是用于存储配置信息和国际化(i18n)资源的关键组件。这些文件通常包含键值对,其中键代表消息或文本标识,值是与该键关联的本地化字符串。在处理中文内容时,由于字符编码的问题,可能会...

    java修改Properties文件,让输出格式与输入格式保持不变

    在Java编程中,Properties类是处理配置文件的关键工具,它用于加载、存储键值对,这些键值对常被用于程序的配置。然而,当我们读取一个Properties文件并再次保存时,原始的格式可能会发生变化,比如注释丢失、行顺序...

    java读取properties六种方法

    在Java编程中,读取`properties`文件是常见的任务,用于存储配置信息或者系统设置。以下将详细讲解六种不同的方法来实现这一功能。 1. **使用Properties类** Java的标准库提供了`java.util.Properties`类,它是...

    Java Properties 解决中文乱码和顺序读写.docx

    Java Properties 类是Java标准库中用于处理配置文件的关键组件,主要负责存储和加载键值对数据,常用于管理应用程序的配置信息。配置文件通常以`.properties`为扩展名,采用文本格式,每行包含一个键值对,键和值...

    java properties应用案例

    下面将详细介绍如何使用Properties类进行配置文件的操作。 1. **加载Properties文件** 要加载.properties文件,我们需要创建一个InputStream对象,然后调用Properties类的`load()`方法。例如: ```java ...

    Python实现读取Properties配置文件的方法

    在Python编程中,有时我们需要处理Java开发中常用的`.properties`配置文件。虽然Python标准库并未直接提供处理此类文件的模块,但我们可以自定义一个类来实现这个功能。本篇文章将详细探讨如何通过Python来读取并...

    读取properties文件返回map

    在Java编程中,`properties`文件是一种常用的配置文件格式,用于存储应用的配置参数或设置。这些文件通常以键值对的形式存在,如`key=value`。本篇将详细讲解如何在Java中读取`properties`文件并将其内容转换为`Map`...

Global site tag (gtag.js) - Google Analytics