了解配置文件

如果你一直在做架构。你设计的框架一定是可配置的,包括那些数据库的配置,当然,还有其它。

一个灵活的程序肯定会有各种各样的配置,具体使用情况也各不相同。本文讲解的是纯java配置文件的加载,没有使用任何ssh之类的东东。毕竟框架这样的东东学不长的,基础打好,对人生日后的发展都有好处。

最常见的可能有SQL,XML,Property文件以及Java常量类。

对于一些常用的变量,使用Java常量类可能是最好的选择了。直接用,快速随手可取。用于多处常用的地方是个不错的选择。

SQL用于验证那些登录,MD5等需要验证以及和某些功能模块相连的数据,放在一起读取,是常用的手法之一。

最后XML,Property两种文件常用于配置一些数据库连接,缓存,国际化等,而Property就是我要讲的重点。

至于XML由于读取可能稍微复杂,具体可看我的另一篇文件。专门讲解如何使用Dom4j/JDom+Xpath读取XML的博文。XML还有另一个用途,和JSON一样。用来传递数据也是不错的选择。

现在我在这里讲解,如何使用Java静态常量类+property读取配置文件,并快速加载到程序中。对于我这种经常架构的人,这是最常用的手段。一般情况我想我都会配置这么一个文件。

好了。土豆不喜欢废话,介绍完了,直接上代码。

config.properties

  1. #URL  
  2. url.sms=http\://localhost\:8080/sms/sendSms  
  3. url.masIP="211.99.213.001"  
  4. url.masApiPort=61616  
  5. #Pool  
  6. jdbc.sql.poolname="pool2"  
  7.   
  8. #sql  
  9. jdbc.sql.driverClassName=net.sourceforge.jtds.jdbc.Driver  
  10. jdbc.sql.url=jdbc:jtds:sqlserver://localhost:1433/sms  
  11. jdbc.sql.username=sa  
  12. jdbc.sql.password=123  
  1. /** 
  2.      * 装配配置文件 initProperties 
  3.      */  
  4.     private static void loadProperties() {  
  5.         rb = ResourceBundle.getBundle("config", Locale.getDefault());  
  6.         driver = rb.getString("jdbc.sql.driverClassName");  
  7.         url = rb.getString("jdbc.sql.url");  
  8.         name = rb.getString("jdbc.sql.username");  
  9.         password = rb.getString("jdbc.sql.password");  
  10.         poolname = rb.getString("jdbc.sql.poolname");  
  11.     }  
上述方法即完成一次配置文件的简单读取。

下面我们写成静态公共的。在其它地方调用。

  1. package com.sinoglobal.utils;  
  2.   
  3. import java.util.Locale;  
  4. import java.util.ResourceBundle;  
  5.   
  6. public class ResourceUtils {  
  7.     private static ResourceBundle rb = null;  
  8.     public static String smsUrl = null;  
  9.     public static String masIP = null;  
  10.     public static int masApiPort = 0;  
  11.     static {  
  12.         rb = ResourceBundle.getBundle("config", Locale.getDefault());  
  13.         smsUrl = rb.getString("url.sms");  
  14.         masIP = rb.getString("url.masIP");  
  15.         masApiPort = Integer.parseInt(rb.getString("url.masApiPort"));  
  16.     }  
  17. }  
在这里直接可以调用。一些简单的配置用这种方法读取是最好不过的了。而使用XML的方式你还得去解析。
  1. //启动SMSApiClient  
  2.     public boolean start() {  
  3.         try {  
  4.             int masApiPort = ResourceUtils.masApiPort;  
  5.             String masIP = ResourceUtils.masIP;  
  6.             // SmsApiClientHandlerImpl是由自己实现的  
  7.             SmsApiClientHandler smsHandler = new SmsApiClientHandlerImpl();  
  8.             System.out.println("初始化中。。。");  
  9.             smsApiClient = ApiClientFactory.createSmsApiClient(smsHandler,masIP, masApiPort, appID, appPwd);  
  10.             // 设置是否自动重连到服务器(可以不需要设置)  
  11.             smsApiClient.setAutoConnect(true);  
  12.             // 设置自动重连服务器相隔时间(单位:秒), 默认为30秒(可以不需要设置)  
  13.             smsApiClient.setReConnectInterval(60);  
  14.             // 设置与服务连接超时时长,单位:millisecond(可以不需要设置)  
  15.             smsApiClient.setConnectTimeout(100000);  
  16.             // 设置发送超时时长,单位:millisecond(可以不需要设置)  
  17.             smsApiClient.setSendTimeout(1000000);  
  18.             // 以上方法在调用start方法前设置。否则无效!  
  19.             smsApiClient.start();// 必须启动!!!!完成初始化.  
  20.             System.out.println("服务启动。。。");  
  21.         } catch (ApiException e) {  
  22.             return false;  
  23.         }  
  24.         return true;  
  25.     }  

最后,还有一种配置方法,不过是写死的方法。并不是灵活的。主要用在一些需要经常读取的东东上面。

这样的东东一般直接写一个常量类。然后全部是静态调用。节约资源。

比如这样的一个:

  1. package com.sinoglobal.cons;  
  2.   
  3. import com.sinoglobal.utils.DateUtils;  
  4.   
  5.   
  6. /** 
  7.  * 常量类 
  8.  *  
  9.  * @author lz 
  10.  */  
  11. public class Const {  
  12.   
  13.     public static String SysStartTime=DateUtils.getNowDate("yyyy-MM-dd HH:mm:ss.SSS");  //平台启动时间  
  14.     public static long reqCount=0;//平台请求次数  
  15.     public static int sendtimes=3;  //发送短信失败重发请求最大次数  
  16.     public static int receivetimes=3;   //接收短信转发请求最大次数  
  17.       
  18.       
  19.     /**============================| 
  20.      *  
  21.      * 发送短信验证 
  22.      *  
  23.      ============================|*/  
  24.     //远程连接验证  
  25.     public static final String noFunctions="2;用户没有相应的权限";  
  26.     public static final String noServer="2;没有找到相应的短信服务器";  
  27.     public static final String sendfailed="2;短信发送失败";  
  28.     public static final String onMaxNo="2;超过最大群发数量";  
  29.     public static final String noNet="2;网关未连接";  
  30.     public static final String onMaxWord="2;短信字数超过70";  
  31.     public static final String apiError="2;API短信客户端调用失败";  
  32.       
  33.     public static final String loginError="用户名或密码错误";  
  34.     public static final String md5Error="md5校验未通过....";  
  35.     public static final String connError="远程连接失败";  
  36.     //信息验证  
  37.     public static final String infoError="2;信息输入不完整";  
  38.     public static final String onMobileMax="2;手机号码长度大于500";  
  39.     public static final String mobileTypeError="2;手机号码格式不正解";  
  40.     public static final String DateError="2;时间格式不正确";  
  41.     public static final String onXcodeMax="2;短信子号+扩展码长度不能大于8位数";  
  42.     public static final String xcodeIsNotNo="2;扩展码为非法数字";  
  43.     public static final String xcodeIsUp0="2;扩展码必须大于0的整数";  
  44.     public static final String xcodeError="2;扩展码[去除前两位短信子号]只能是0-999999之间的数字";  
  45.       
  46. }  


当然像log4j这样的配置就更为灵活了。可以在web.xml配置初始值,然后映射到log4j.properties中去。


像上面的这个常量类的好处是,不用每次声明变量来读取,在任何其它的地方都可以调用,关键是它是静态的,可以节约资源,也不用去数据库读取,无疑提高了效率,是java开发的便捷之道。而且我们可以配置多个模块,这样就层次分明了。对于一些要从数据库定时查询相关的东东我们可以放在这里,直接调用。毕竟轮循数据库是一件庞大而费力的工作。

当然,只有当你试过后你才会知道。


一个好的项目,一定有一个好的框架,一个灵活而简单的配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值