common-tools(2)之properties替代者Setting类

    首先广告自己的工具包 http://www.oschina.net/p/common-tools

------------------------ 邪恶的分割线 ------------------------------------

    由于Java是需要编译执行的,因此不像解释性语言那样可以把需要配置的文件放置在源代码中,因此我们最常用到的就是proerties文件和XML。当然后者的强大不容置疑,而应对一些简单的配置我们还是离不开proerties的,但是,properties文件的缺点有时令我们很郁闷……缺点如下:
    1、只支持ASSCII编码,导致我想加个中文注释吧都费劲(谁让咱英语烂呢……)
    2、Properties类的使用实在是不方便啊,我new完你还让我load一个流对象,费劲。
    3、不支持变量替换
    4、我讨厌这个单词,老是拼不对……

    于是就动手写了个Setting类,源码请看这里:
https://github.com/looly/common-tools/blob/master/src/main/java/com/baijob/commonTools/Setting.java

其实这个类与Properties类很相似,只不过强化了构造方法,首先看代码:

# **************************************************************
# ----- Setting File with UTF8-----
# ----- 样例配置文件 -----
# **************************************************************

bool.key = true
char.key = A
string1 = String of value
string2 = ${string1}
package com.baijob.commonTools;

public class SettingTest {
	public static void main(String[] args) {
		Setting setting = new Setting("config/example.setting", "utf8", true);
		boolean bool = setting.getBool("bool.key");
		char char1 = setting.getChar("char.key");
		String string = setting.getString("string1");
		String string2 = setting.getString("string2");
		
		System.out.println(bool + ", " + char1 + ", " + string + ", " + string2);
		
		//当配置文件有改动调用此方法
		setting.reload();
	}
}

    首先使用了其中一个最常用的构造方法,第一个参数是相对路径(相对于classes目录),第二个是这个Setting的字符集,第三个则是是否使用变量替换(如果使用,则在构造的时候会做变量 替换),下面几个方法就是获得不同类型的值了,是不是超简单超方便?同样的,默认我们在配置文件中用“#”表示注释,变量用${key}表示变量。当然,变量暂时只能在value中使用。

    当然,需要强调的是本类中有很多构造方法,这些构造方法是针对配置文件所处不同位置时设定的:
1、Setting(String pathBaseClassLoader, String charset, boolean isUseVariable)
    此方法用于读取配置文件基于classes目录的相对路径,例如Tomcat将class文件放在WEB_INF/classes下,那么给定pathBaseClassLoader值为"./config.setting"表示这个文件在WEB_INF/classes目录下。这样做的好处是配置文件随着项目变动不会影响读取,而且就算项目打成jar包或war包,依旧可以正常读取。

2、public Setting(File configFile, String charset, boolean isUseVariable)
    此方法传入一个File类,一般new一个File即可,常用语读取绝对路径的配置文件

3、Setting(String path, Class<?> clazz, String charset, boolean isUseVariable)
    此方法也是读取相对路径的配置文件,只不过这回相对的是给定的Class。例如给定的Class是com.aaa.bb.AA.class,则给定路径"./config.setting"表示与AA.class同目录下的config.setting文件,也是支持打包读取哦。

4、Setting(URL url, String charset, boolean isUseVariable)
    此方法接受一个URL对象,用于读取URL指定的配置文件


5、Setting(Charset charset, boolean isUseVariable)
    好吧,如果你不想在一开始的时候就初始化一切,就可以先调这个方法把对象new出来,然后调用load方法去加载配置文件。

    第5种构造在什么时候可能用到呢?我想的是你对我的变量定义不满意,例如你发现${key}这种变量名与你的项目的其他东东冲突了,OK,我提供了setVarRegex(String regex)方法来自定义变量的形式。由于变量我是通过正则去匹配的,你也必须给我一个正则的形式,我在注释中是这样规定的:正则只能有一个group表示变量本身,剩余为字符 例如 \$\{(name)\}表示${name}变量名为name的一个变量表示。

    现在你知道有时老实点儿遵循规范可以减少很多学习成本和时间,我恨不得你所有的配置文件都在相对路径下,反正我是这么做的。

    接下来,解释个方便的好方法:settingToObject(Object object),这个方法是映射配置文件中的键值对给一个对象的,这样的话,假如你这个对象有个方法叫setName(String name),配置文件中有个name=凤姐,那么调用此方法会自动将“凤姐”注入进去(好邪恶……),想想Spring的IOC,我是不是应该改这个方法的名字叫settingToBean呢?不管了,反正能干活就行。

    因为是继承自Map,故可以调用set方法保存配置,这时配置只保存在内存中。

    最后解释下持久化Setting,有个store方法可以保存Setting为文件,有两个重载方法可以使用相对或绝对路径,但是不能写入jar包中的配置文件。

    好了,这个类解释完了,我这有点儿懒,没给出很详细的代码,大家有兴趣的可以去看看源码,如果觉得有用,也可以单独拷贝出来用(这个类依赖FileUtil和net/URLUtil)。

    恩……就到这里,大周末的,衣服还没洗……单身屌丝只能靠自己啊~~

转载于:https://my.oschina.net/looly/blog/111425

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此工具我不再更新,里面大多数方法我迁移到了hutool工具包中,而其中一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据库工具 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${classpath}/config/db.setting,按照配置文件中的说明替换相应值 如果使用Druid,则需参考druid-example.setting创建${classpath}/config/druid.setting文件,详情请参考官方文档 使用C3P0则需要参考c3p0-config-example.xml创建${classpath}/c3p0-config.xml来调节C3P0参数 此时即可调用C3p0Ds.getDataSource()或DruidDs.getDataSource()方法获得默认的数据源 如果要自定义数据库配置文件的参数,请调用相应的init(),传入相关参数 注:Setting对象请参考与之对应的章节 2、com.baijob.commonTools.db.DbUtil 数据库工具,提供了关闭方法:关闭可以传入多个参数,关闭的顺序是按照参数的顺序来的,用于一次性关闭Connnection、Statement、ResultSet等 newSqlRunner方法用于快速新建一个SqlRunner(此介绍参考下问) 3、com.baijob.commonTools.db.DsSetting,用于读取db.setting文件辅助,内部使用 4、com.baijob.commonTools.db.SqlRunner参考Apache的DbUtils工具包,封装了常用的增删改查方法,与com.baijob.commonTools.db.RsHandler配合使用 com.baijob.commonTools.db.RsHandler接口与Apache的DbUtils的ResultSetHandler等价,抽象结果集处理。 二、邮件工具 1、com.baijob.commonTools.mail.MailAccount 邮件账户。 可以调用MailAccount(String accountSettingFileBaseClassLoader)读取相对路径的Setting文件,配置参考mailAccount-example.setting 2、com.baijob.commonTools.mail.MailUtil邮件发送工具,方法请参考注释 此工具依赖javax.mail,请参考pom.xml添加依赖或手动下载 三、网络相关工具 1、com.baijob.commonTools.net.AccessControl访问控制,基于配置文件,可以设定IP白名单或黑名单,可以通过配置文件实现简单的账户验证。 配置文件请参考access-example.xml 2、com.baijob.commonTools.net.Connector 连接对象实体,有host、端口、用户名、密码等属性 3、com.baijob.commonTools.net.HtmlUtil HTML工具,暂时只提供特殊字符转义 4、com.baijob.commonTools.net.SocketUtil socket工具。 isUsableLocalPort() 检测本地某个端口是否可用(可用是指没有被其他程序占用) isValidPort()是否是符合规范的端口号 longToIpv4()将long转换为ipv4地址,反方法是ipv4ToLong() netCat()简易的数据发送方法 5、com.baijob.commonTools.net.SSHUtil SSH相关工具 getSession()获得一个SSH会话 bindPort()将远程主机的端口映射到本地某个端口 6、com.baijob.commonTools.net.URLUtil 将相对、绝对路径转换为URL对象,用于网络或文件流的读写,Setting的配置依赖此工具包 四、线程相关工具 1、com.baijob.commonTools.thread.BaseRunnable 此实现了Runnable接口,扩展了功能。 增加名称、ID,调用次数和时间统计、线程停止接口等,并且在线程运行时,不允许此线程第二次启动。 2、com.baijob.commonTools.thread.Executor 线程池工具 调用静态方法execute()启动线程,此线程在公共的线程池中执行 若想自定义线程池大小或独立控制,可调用newExecutor()实例化一个线程池 excAsync()执行一个异步方法 3、com.baijob.commonTools.thread.SyncQueue 阻塞队列,简化了JDK的BlockingQueue

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值