在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 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

使用JAVA反射的利与弊

3664
来自专栏IT笔记

SpringBoot开发案例之整合Spring-data-jpa进阶篇

有人说 从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员的学习时间不要钱?我觉得到 h/m 这一级...

3226
来自专栏用户画像

腾讯面试题之词频统计

有一千万条短信,有重复,以文本文件的形式保存,一行一条,找出重复出现最多的前10条。

553
来自专栏IT笔记

Integer类型比较的问题

工作几年了,居然还是出现这个问题,最近做websocket通信,其中在SystemWebSocketHandler类中的一个代码片段,判断条件如下: /** ...

2564
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列13

一、说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter ...

2573
来自专栏IT笔记

SpringBoot开发案例之整合Spring-data-jpa进阶篇

前言 有人说 从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员的学习时间不要钱?我觉得到 h/m ...

2857
来自专栏专注 Java 基础分享

Spring框架学习之注解配置与AOP思想

     上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点。而...

1825
来自专栏Hongten

Java Web javaBean

<jsp:useBean class="webbook.chapter9.Book" id="book" scope="page"/>

432
来自专栏互联网大杂烩

HandlerMapping

HandlerMapping家族成员分为两支,一支继承AbstractUrlHandlerMapping,另一支继承AbstractHandlerMethodM...

562
来自专栏Danny的专栏

【MyBatis框架点滴】——MyBatis输入映射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

531

扫描关注云+社区