commons configuration管理项目的配置文件
Commons Configutation
commons configuration可以很方便的访问配置文件和xml文件中的的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。
官方文档:http://commons.apache.org/proper/commons-configuration/
1、Maven中引入相关的jar
<!-- 配置文件读取 -->
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
2、读取properties文件的内容
(1)新建一个icp.properties
name=parry
port=21
flag=true
users=Tom,parry
(2)工具类读取
package icp; import java.util.List; import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; public class Test { public static final String fileName = "icp.properties"; public static PropertiesConfiguration cfg = null; static {
try {
cfg = new PropertiesConfiguration(fileName);
} catch (ConfigurationException e) {
e.printStackTrace();
}
// 当文件的内容发生改变时,配置对象也会刷新
cfg.setReloadingStrategy(new FileChangedReloadingStrategy());
}
// 读String
public static String getStringValue(String key) {
return cfg.getString(key);
}
// 读int
public static int getIntValue(String key) {
return cfg.getInt(key);
}
// 读boolean
public static boolean getBooleanValue(String key) {
return cfg.getBoolean(key);
}
// 读List
public static List<?> getListValue(String key) {
return cfg.getList(key);
}
// 读数组
public static String[] getArrayValue(String key) {
return cfg.getStringArray(key);
} }
(3)测试
public static void main(String[] args) {
String name = Test.getStringValue("name");
System.out.println("name:" + name);
int port = Test.getIntValue("port");
System.out.println("port:" + port);
boolean flag = Test.getBooleanValue("flag");
System.out.println("flag:" + flag);
List<String> users = (List<String>) Test.getListValue("users");
for (String user : users) {
System.out.println("user:" + user);
}
}
(4)测试结果
3、读取XML配置文件
(1)新建一个XMl文件
<?xml version="1.0" encoding="UTF-8"?>
<config>
<database>
<url>127.0.0.1</url>
<port>1521</port>
<login>admin</login>
<password>pass</password>
</database>
</config>
(2)读取XML配置的工具文件
package icp; import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; public class XmlTest { public static final String fileName = "XMLProperties.xml"; public static XMLConfiguration cfg = null; static {
try {
cfg = new XMLConfiguration(fileName);
} catch (ConfigurationException e) {
e.printStackTrace();
}
// 配置文件 发生变化就重新加载
cfg.setReloadingStrategy(new FileChangedReloadingStrategy());
} public static String getStringValue(String key) {
return cfg.getString(key);
} public static int getIntValue(String key) {
return cfg.getInt(key);
}
}
这里只是添加读取String 和读取Int的方法,其他的方法类似。
(3)测试
public static void main(String[] args) {
String url = XmlTest.getStringValue("database.url");
System.out.println("url:" + url);
int port =XmlTest.getIntValue("database.port");
System.out.println("port:"+port);
}
(4)测试结果
由于项目中,经常有多个配置文件,最后提供一个工具类:
public class PropertiesUtil { public static Map<String, Object> configMap = new ConcurrentHashMap<String, Object>(); public static String getStringValue(String fileName, String key) {
if (!configMap.containsKey(key)) {
PropertiesUtil.initConfig(fileName);
}
if (fileName.endsWith(".properties")) {
PropertiesConfiguration cfg = (PropertiesConfiguration) configMap.get(fileName);
return cfg.getString(key);
} else if (fileName.endsWith(".xml")) {
XMLConfiguration cfg = (XMLConfiguration) configMap.get(fileName);
return cfg.getString(key);
}
return null;
} private static void initConfig(String fileName) {
try {
if (fileName.endsWith(".xml")) {
XMLConfiguration cfg = new XMLConfiguration(fileName);
configMap.put(fileName, cfg);
} else if (fileName.endsWith(".properties")) {
PropertiesConfiguration cfg = new PropertiesConfiguration(fileName);
configMap.put(fileName, cfg);
}
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
测试:
public static void main(String[] args) {
String name= PropertiesUtil.getStringValue("icp.properties", "name");
System.out.println(name);
String url = PropertiesUtil.getStringValue("icp.xml", "database.url");
System.out.println(url);
}
commons configuration管理项目的配置文件的更多相关文章
- 使用Apache Commons Configuration读取配置信息
在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架——Apache Commons Configuration framework. 你会了 ...
- Apache Commons Configuration读取xml配置
近期项目自己手写一个字符串连接池.因为环境不同有开发版本.测试版本.上线版本.每一个版本用到的数据库也是不一样的.所以需要能灵活的切换数据库连接.当然这个用maven就解决了.Apache Commo ...
- 使用NuGet管理项目类库引用
NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了N ...
- ASP.NET Core实现类库项目读取配置文件
前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...
- itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景 像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...
- Apache Commons configuration使用入门
使用Commons Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...
- Commons Configuration之二基本特性和AbstractConfiguration
Configuration接口定义一大堆方法.一切从头开始实现这些方法非常困难.因为AbstractConfiguration类存在.该类在Commons Configuration中充当大多数Con ...
- Apache Commons Configuration的应用
Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
随机推荐
- Hive学习笔记(一)
摘要: Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机制.H ...
- 笔记:xubuntu下如何让系统默认使用nvidia显卡,而不是intel集显
经反复折腾,得到如下的解决方法: prime-select nvidia 简单吧,但关系是如果让它开机自动执行一次. 反复折腾了xinitrc ,~/.xinitrc , /etc/rc.local ...
- canvas学习之API整理笔记(一)
其实canvas本身很简单,就是去学习它的API,多看实例,多自己动手练习,多总结.但是canvas的API实在是有点多,对于初学者来说,可能学到一半就止步不前了.我也有这种感觉,在学习的过程中,编写 ...
- dialog 模块化窗口
xDialog 方法 说明 参数 modal(opts) 模块化弹窗 opts={ title:'标题' , width : '宽度(400)', height : '高度(300)', button ...
- Linux-ssh配置
- Normalize.css的使用及下载
Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备 ...
- Android中通信协议
一.TCP/IP协议(传输层协议) 1.Socket与ServerSocket Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计就是门 ...
- [Erlang 0120] Know a little Core Erlang
Erlang开发者或多或少都用过或者听说过Core erlang,它是什么样的呢?新建一个测试模块a.erl,如下操作会生成core erlang代码而非a.beam: Eshell V6.0 ...
- OpenWRT镜像爬虫搭建本地源
网上的爬虫不能用,还是先表达谢意,不过我比较懒不喜欢重复写别人写的教程,只贴出修改,怎么用自己看教程吧. 我自己改了一版可以正常爬: #!/usr/bin/env python #coding=utf ...
- CentOS下开启mysql远程连接,远程管理数据库
当服务器没有运行php.没装phpmyadmin的时候,远程管理mysql就显得有必要了.因为在CentOS下设置的,所以标题加上了CentOS,以下的命令在debian等系统下应该也OK. mysq ...