在Springmvc中获取properties属性

一些关键的属性一般都会拿出来作为配置,比如数据库连接等。在springmvc中也提供了获取property的类,比如@Value来获取。我接触spring很浅,基本上都是百度的问题解决方法,百度到@value的用法,按照说明尝试了两次都失败了。正巧身边又有合适的方法,于是便没有去深入研究为什么失败,这个留在以后研究。下面就是获取代码:

源码来自:https://github.com/thinkgem/jeesite

  1 package com.demo.common.utils;
  2 
  3 import org.apache.commons.io.IOUtils;
  4 import org.slf4j.Logger;
  5 import org.slf4j.LoggerFactory;
  6 import org.springframework.core.io.DefaultResourceLoader;
  7 import org.springframework.core.io.Resource;
  8 import org.springframework.core.io.ResourceLoader;
  9 
 10 import java.io.IOException;
 11 import java.io.InputStream;
 12 import java.util.NoSuchElementException;
 13 import java.util.Properties;
 14 
 15 /**
 16  * Properties文件载入工具类. 可载入多个properties文件, 相同的属性在最后载入的文件中的值将会覆盖之前的值,但以System的Property优先.
 17  * Created by Administrator on 2016/2/23.
 18  */
 19 public class PropertiesLoader {
 20     private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class);
 21     private static ResourceLoader resourceLoader = new DefaultResourceLoader();
 22     private final Properties properties;
 23 
 24     public PropertiesLoader(String... resourcesRaths) {
 25         properties = loadProperties(resourcesRaths);
 26     }
 27 
 28     public Properties getProperties(){
 29         return properties;
 30     }
 31 
 32     /**
 33      * 取出property,但以System的property优先,取不到返回空字符串
 34      */
 35     private String getValue(String key){
 36         String systemProperty = System.getProperty(key);
 37         if (systemProperty!=null){
 38             return systemProperty;
 39         }
 40         if (properties.containsKey(key)){
 41             return properties.getProperty(key);
 42         }
 43         return "";
 44     }
 45 
 46     /**
 47      * 取出String类型的Property,System的优先
 48      * @throws NoSuchElementException
 49      */
 50     public String getProperty(String key){
 51         String value = getValue(key);
 52         if (value==null){
 53             throw new NoSuchElementException();
 54         }
 55         return value;
 56     }
 57 
 58     /**
 59      * 取出String类型的Property,System的优先,null则返回默认值
 60      */
 61     public String getProperty(String key,String defaultValue){
 62         String value = getValue(key);
 63         return value!=null?value:defaultValue;
 64     }
 65 
 66     /**
 67      * 取出Integer类型的Property,System优先
 68      * @throws NoSuchElementException
 69      */
 70     public Integer getInteger(String key){
 71         String value = getValue(key);
 72         if (value==null){
 73             throw new NoSuchElementException();
 74         }
 75         return Integer.valueOf(value);
 76     }
 77         /**
 78      * 取出Integer类型的Property,System优先,null则返回默认值
 79      */
 80     public Integer getInteger(String key,Integer defaultValue){
 81         String value = getValue(key);
 82 
 83         return value!=null?Integer.valueOf(value):defaultValue;
 84     }
 85 
 86     /**
 87      * 取出Double类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常.
 88      */
 89     public Double getDouble(String key) {
 90         String value = getValue(key);
 91         if (value == null) {
 92             throw new NoSuchElementException();
 93         }
 94         return Double.valueOf(value);
 95     }
 96 
 97     /**
 98      * 取出Double类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常
 99      */
100     public Double getDouble(String key, Integer defaultValue) {
101         String value = getValue(key);
102         return value != null ? Double.valueOf(value) : defaultValue;
103     }
104 
105     /**
106      * 取出Boolean类型的Property,但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false.
107      */
108     public Boolean getBoolean(String key) {
109         String value = getValue(key);
110         if (value == null) {
111             throw new NoSuchElementException();
112         }
113         return Boolean.valueOf(value);
114     }
115 
116     /**
117      * 取出Boolean类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false.
118      */
119     public Boolean getBoolean(String key, boolean defaultValue) {
120         String value = getValue(key);
121         return value != null ? Boolean.valueOf(value) : defaultValue;
122     }
123 
124 
125 
126     /**
127      * 载入多个文件,文件路径使用spring resource格式
128      * @param resourcesRaths
129      * @return
130      */
131     private Properties loadProperties(String[] resourcesRaths) {
132         Properties props = new Properties();
133 
134         for (String location : resourcesRaths) {
135             logger.debug("Loading properties file from:" + location);
136             InputStream is = null;
137             try {
138                 Resource resource = resourceLoader.getResource(location);
139                 is = resource.getInputStream();
140                 props.load(is);
141             } catch (IOException e) {
142                 logger.info("Could not load properties from path:{},{}",location,e.getMessage());
143                 e.printStackTrace();
144             }finally {
145                 IOUtils.closeQuietly(is);
146             }
147         }
148         return props;
149     }
150 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术专栏

Scala入门与进阶(三)- 函数

默认参数:在函数定义时,允许指定参数的默认值 $SPARK_HOME/conf/spark-defaults.conf

873
来自专栏CVer

Python Numpy学习教程(一)Python篇

通知:这篇文章主要简单介绍Python的基本数据结构、容器、列表、字典、集合、元组、函数和类等知识点 Python Numpy学习教程 Author: ...

74114
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记07

1071
来自专栏于晓飞的专栏

Java 泛型进阶

在 List<String> 中添加 Integer 将不会通过编译,但是List<Sring>与List<Integer>在运行时的确是同一种类型。

1493
来自专栏微信公众号:Java团长

初学者应该了解的数据结构:Array、HashMap 与 List

当开发程序时,我们(通常)需要在内存中存储数据。根据操作数据方式的不同,可能会选择不同的数据结构。有很多常用的数据结构,如:Array、Map、Set、List...

752
来自专栏源哥的专栏

调试工具类

import java.io.*; import java.util.*; import java.text.*; import java.lang.refle...

794
来自专栏架构之路

动态代理模式原理

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来...

3234
来自专栏Linyb极客之路

简洁又快速地处理集合——Java8 Stream(下)

而 parallelStream() 是并行流方法,能够让数据集执行并行操作,后面会更详细地讲解

3.2K3
来自专栏java一日一条

(转)Java正则表达式入门

众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此...

501
来自专栏漫漫全栈路

C#历代版本新特性——面试题常用

掌握一门语言,当然要掌握它的特性,而随着C#历代版本的迭代更替,C#语言也日趋完善,在C#2.0~C#4.0版本所带来的新的语法特性格外重要。C#的新特性,其...

4299

扫码关注云+社区