装载Properties资源文件的项目中使用
ssm项目中打算将发短信的每小时每天的限定变成可配置的。于是将配置信息写在资源文件中,现在有两种方式加载资源文件,一个是使用spring注入方式,@Value注解注入,当然,前面需要在项目中装载。第二种使用的是Properties类装载properties文件,然后获取。
这个我有点笨,spring装载失败了,所以使用第二种方式。第二种方式获取又恶心到了我,就是关于资源文件地址我有点拿不定,还有就是何时进行初始化,如何自动调用,想法是静态代码块,这个时候你需要注意static块的装载顺序。我用得不灵活,然后看了下公司的工具类,感觉挺厉害的,学会抽象封装,造轮子,耶耶耶!
代码:
package com.ref.sms.util.constant; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set; /**
* 常量配置类,从指定文件读取常量
*
*/
public class ConfigurableContants { private static final Logger logger = LoggerFactory.getLogger(ConfigurableContants.class); protected static Properties p = new Properties(); protected static String propertyFilePath = null; protected static void init(String propertyFileName) {
InputStream in = null;
try {
in = ConfigurableContants.class.getResourceAsStream(propertyFileName);
if (in != null)
p.load(in);
} catch (IOException e) {
logger.error("load " + propertyFileName + " into Contants error");
} finally {
if (in != null) {
try {
propertyFilePath = propertyFileName;
in.close();
} catch (IOException e) {
}
}
}
} protected static String getProperty(String key, String defaultValue) {
return p.getProperty(key, defaultValue);
} protected static final String getProperty(String key) {
return getProperty(key, "");
} /**
* 取以","分割的集合属性
*
* @param key
* @param defaultValue
* @return
*/
protected static Set<String> getSetProperty(String key, String defaultValue) { String[] strings = p.getProperty(key, defaultValue).split(",");
HashSet<String> hashSet = new HashSet<String>(strings.length);
for (String string : strings) {
hashSet.add(string.trim());
}
return hashSet;
} protected static Set<String> getSetProperty(String key) {
return getSetProperty(key, "");
} protected static void refreshInit(){
init(propertyFilePath);
} } package com.ref.sms.util.constant; /**
* Created by zhen on 2017-07-17.
*/
public class SmsConstants extends ConfigurableContants{ static{
init("/smsConfiguration.properties");
} public static final String SMS_DAY_LIMIT = getProperty("sms_day_limit");
public static final String SMS_HOUR_LIMIT = getProperty("sms_hour_limit"); }
使用的是Class类的getResourceAsStream方法获取资源。
public InputStream getResourceAsStream(String name)
- 查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给
ClassLoader.getSystemResourceAsStream(java.lang.String)。在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:
- 如果 name 以 '/' 开始 ('\u002f'),则绝对资源名是 '/' 后面的 name 的一部分。
- 否则,绝对名具有以下形式:
modified_package_name/name
其中 modified_package_name 是此对象的包名,该名用 '/' 取代了 '.' ('\u002e')。
-
-
- 参数:
name- 所需资源的名称- 返回:
- 一个
InputStream对象;如果找不到带有该名称的资源,则返回 null - 抛出:
NullPointerException- 如果 name 是 null
装载Properties资源文件的项目中使用的更多相关文章
- java中根据key获取resource下properties资源文件中对应的参数
properties资源文件是放在resource目录下的: 新建工具类: package com.demo.utils; import java.io.InputStream; import jav ...
- 读取web工程中.properties资源文件的模板代码
读取web工程中.properties资源文件的模板代码 // 读取web工程中.properties资源文件的模板代码 private void test2() throws IOException ...
- 在服务端中,读取properties资源文件中的数据
1.获取到资源的路径 2.读取数据 //properties文件对象 Properties properties = new Properties(); //通过HttpServletRequest ...
- Spring3.x 获取properties资源文件的值
Spring3.x 获取properties资源文件的值有两种方式: 第一种:使用<context:property-placeholder />标签 <context:prop ...
- C#.NET常见问题(FAQ)-如何把资源嵌入到项目中
首先把图像的资源添加到项目中, 选择资源文件(常规),修改一下这个资源的名字(比如叫做ButtonPic) 我们假定已经把图像放到了项目的某个文件夹下(比如Pic文件夹下,注意不是bin目录下 ...
- Eclipse中定位当前文件在项目中的位置
点击红色框内的按钮,就能定位当前文件在项目中的位置, 另外, 找到位置后记得再点击一下这个按钮, 要不然每次打开一个文件都会自动定位
- 关于properties文件在项目中的使用
这个是当时在学习JDBC的时候老师给讲的.web项目中把一些常用的用户名和密码都填写到一个对应的配置文件中,这样每次修改密码或者用户名的时候就可以直接修改这个配置文件了,不用动源码. 老师讲了两种读取 ...
- maven 打包时动态替换properties资源文件中的配置值
pom build节点下面添加resource配置: <resources> <resource> <directory>src/main/resources/&l ...
- java基础知识3--如何获取资源文件(Java中获取资源文件的url)
java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...
随机推荐
- Mysql覆盖索引与延迟关联
延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不 ...
- IDEA安装以及项目初始化
首先安装idea: 如果15.0版本安装不上就安装16.0: 点击安装文件以后,一直点下一步就可以了. 安装完成后设置: 如果没有的话,需要点击SDKs,点击+,然后选择电脑上安装的JDK. 接下来创 ...
- 【Loadrunner】平台1.9环境APP成功录制并调试成功后的脚本备份
1.录制相关Loadrunner及录制的APP所在手机网络代理相关设置请参考日志:http://www.cnblogs.com/zhuzhubaoya/p/9152022.html 2.调试成功的脚本 ...
- 【Python】【爬虫】如何学习Python爬虫?
如何学习Python爬虫[入门篇]? 路人甲 1 年前 想写这么一篇文章,但是知乎社区爬虫大神很多,光是整理他们的答案就够我这篇文章的内容了.对于我个人来说我更喜欢那种非常实用的教程,这种教程对于想直 ...
- Keras-图片预处理
图片预处理 图片生成器ImageDataGenerator keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, ...
- CentOS 7 SSH 免密登录的方法
先决条件 3 台 CentOS 7 HOSTNAME IP ROLE server1 10.8.26.197 Master server2 10.8.26.196 Slave1 server3 10. ...
- HDU1573:X问题(解一元线性同余方程组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ...
- Web Services 平台元素SOAP、WSDL 、UDDI
Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? SOAP 是一种使应用程序有能力通过 HTTP 交换信息的基于 XML 的简易协议.或者可以更简 ...
- Deep Learning(2)
二.Deep Learning的基本思想和方法 实际生活中,人们为了解决一个问题,如对象的分类(对象可是是文档.图像等),首先必须做的事情是如何来表达一个对象,即必须抽取一些特征来表示一个对象,如文本 ...
- django需要了解的
搞得差不多就去看看类和对象,看看oop是什么,多用lambda,学学md5加密. 你应当了解,django不是服务器,只提供服务.因此,学习nginx.或是apache是必要的.(IIS不了解,不过题 ...