`
IThead
  • 浏览: 427983 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于配置的那一点点事

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

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

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

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

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

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

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

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

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

config.properties

  
 #URL  
    url.sms=http\://localhost\:8080/sms/sendSms  
    url.masIP="211.99.213.001"  
    url.masApiPort=61616  
    #Pool  
    jdbc.sql.poolname="pool2"  
      
    #sql  
    jdbc.sql.driverClassName=net.sourceforge.jtds.jdbc.Driver  
    jdbcjdbc.sql.url=jdbc:jtds:sqlserver://localhost:1433/sms  
    jdbc.sql.username=sa  
    jdbc.sql.password=123  



 
  /** 
         * 装配配置文件 initProperties 
         */  
        private static void loadProperties() {  
            rb = ResourceBundle.getBundle("config", Locale.getDefault());  
            driver = rb.getString("jdbc.sql.driverClassName");  
            url = rb.getString("jdbc.sql.url");  
            name = rb.getString("jdbc.sql.username");  
            password = rb.getString("jdbc.sql.password");  
            poolname = rb.getString("jdbc.sql.poolname");  
        }  

上述方法即完成一次配置文件的简单读取。

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

   
package com.sinoglobal.utils;  
      
    import java.util.Locale;  
    import java.util.ResourceBundle;  
      
    public class ResourceUtils {  
        private static ResourceBundle rb = null;  
        public static String smsUrl = null;  
        public static String masIP = null;  
        public static int masApiPort = 0;  
        static {  
            rb = ResourceBundle.getBundle("config", Locale.getDefault());  
            smsUrl = rb.getString("url.sms");  
            masIP = rb.getString("url.masIP");  
            masApiPort = Integer.parseInt(rb.getString("url.masApiPort"));  
        }  
    }  


在这里直接可以调用。一些简单的配置用这种方法读取是最好不过的了。而使用XML的方式你还得去解析。

   
//启动SMSApiClient  
        public boolean start() {  
            try {  
                int masApiPort = ResourceUtils.masApiPort;  
                String masIP = ResourceUtils.masIP;  
                // SmsApiClientHandlerImpl是由自己实现的  
                SmsApiClientHandler smsHandler = new SmsApiClientHandlerImpl();  
                System.out.println("初始化中。。。");  
                smsApiClient = ApiClientFactory.createSmsApiClient(smsHandler,masIP, masApiPort, appID, appPwd);  
                // 设置是否自动重连到服务器(可以不需要设置)  
                smsApiClient.setAutoConnect(true);  
                // 设置自动重连服务器相隔时间(单位:秒), 默认为30秒(可以不需要设置)  
                smsApiClient.setReConnectInterval(60);  
                // 设置与服务连接超时时长,单位:millisecond(可以不需要设置)  
                smsApiClient.setConnectTimeout(100000);  
                // 设置发送超时时长,单位:millisecond(可以不需要设置)  
                smsApiClient.setSendTimeout(1000000);  
                // 以上方法在调用start方法前设置。否则无效!  
                smsApiClient.start();// 必须启动!!!!完成初始化.  
                System.out.println("服务启动。。。");  
            } catch (ApiException e) {  
                return false;  
            }  
            return true;  
        }  


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

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

比如这样的一个:

  
 package com.sinoglobal.cons;  
      
    import com.sinoglobal.utils.DateUtils;  
      
      
    /** 
     * 常量类 
     *  
     * @author lz 
     */  
    public class Const {  
      
        public static String SysStartTime=DateUtils.getNowDate("yyyy-MM-dd HH:mm:ss.SSS");  //平台启动时间  
        public static long reqCount=0;//平台请求次数  
        public static int sendtimes=3;  //发送短信失败重发请求最大次数  
        public static int receivetimes=3;   //接收短信转发请求最大次数  
          
          
        /**============================| 
         *  
         * 发送短信验证 
         *  
         ============================|*/  
        //远程连接验证  
        public static final String noFunctions="2;用户没有相应的权限";  
        public static final String noServer="2;没有找到相应的短信服务器";  
        public static final String sendfailed="2;短信发送失败";  
        public static final String onMaxNo="2;超过最大群发数量";  
        public static final String noNet="2;网关未连接";  
        public static final String onMaxWord="2;短信字数超过70";  
        public static final String apiError="2;API短信客户端调用失败";  
          
        public static final String loginError="用户名或密码错误";  
        public static final String md5Error="md5校验未通过....";  
        public static final String connError="远程连接失败";  
        //信息验证  
        public static final String infoError="2;信息输入不完整";  
        public static final String onMobileMax="2;手机号码长度大于500";  
        public static final String mobileTypeError="2;手机号码格式不正解";  
        public static final String DateError="2;时间格式不正确";  
        public static final String onXcodeMax="2;短信子号+扩展码长度不能大于8位数";  
        public static final String xcodeIsNotNo="2;扩展码为非法数字";  
        public static final String xcodeIsUp0="2;扩展码必须大于0的整数";  
        public static final String xcodeError="2;扩展码[去除前两位短信子号]只能是0-999999之间的数字";  
          
    }  



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


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

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


一个好的项目,一定有一个好的框架,一个灵活而简单的配置。
1
0
分享到:
评论
3 楼 jyjava 2011-12-29  
我们公司用的是第二种方法
2 楼 jyjava 2011-12-29  
讲得不错,
1 楼 kimmking 2011-12-29  
数据库或是jcr、zookeeper来做配置的好处是
1、支持分布式下的统一管理
2、可以做到变更通知。

相关推荐

    一点点星空留言本

    【标题】:“一点点星空留言本”是一款以星空为主题的在线留言板应用。它可能是一个网页应用程序或者一个软件,允许用户在虚拟的星空中留下自己的信息、感想或者与他人交流。这样的应用通常具有美观的界面设计,结合...

    关于MySQL学习的一点点笔记.zip

    以下是一些关于MySQL学习的关键知识点: 1. **安装与配置**:MySQL的安装过程包括下载安装包、配置服务器、设置root用户密码等步骤。在Windows和Linux系统上安装方法有所不同,但都需要确保服务启动并正确配置。 2...

    Eclipse+MyEclipse配置

    对Eclipse + MyEclipse编辑器做的一点点配置说明!

    Struts2 配置详解

    Struts2 配置详解 Struts2 配置稍微麻烦了一点点

    HP 3PAR 存储配置手册(详细)

    根据HP原厂工程师的指导,把每一步的详细配置过程按配置顺序都用QQ进行了截图,并在每张截图下面都有详细说明,没接触过3PAR的人用这个手册完全可以完成初始化的配置过程,包括加...因为是一点点做出来的,而且很详细。

    操作mysql的一点点学习整理

    以上是关于“操作MySQL的一点点学习整理”的核心内容。在实践中,不断学习和掌握这些知识点,将有助于你更有效地管理、操作和优化MySQL数据库。文件“mysql.php”可能是用于与MySQL数据库交互的PHP脚本,可以深入...

    vue中使用 NProgress 详细配置跟用法

    一、下载地址 ...二、使用方式 依赖于 jQuery (1.8... NProgress.inc() — 增加一点点 NProgress.done() — 完成进度条 四、基本配置 通过 minimum 来修改最小百分比 NProgress.configure({ minimum: 0.1 }); 通过 eas

    一点点论坛 EDD8 Ver.2003 for DV

    "一点点论坛 EDD8 Ver.2003 for DV" 是一个专为数字视频(DV)用户设计的论坛软件版本,发布于2003年。这个软件平台旨在促进DV爱好者和技术人员之间的交流与合作,提供一个分享知识、讨论技术问题、发布教程以及展示...

    bootstarp整理的一点点东西,以及部分示例

    在“bootstarp整理的一点点东西,以及部分示例”这个压缩包中,包含了几个与Bootstrap相关的示例,特别是关于表格处理的部分。以下是这些示例的详细解读: 1. **table示例**: 这个文件很可能是展示如何使用...

    关于基础perl和shell编写的一点点心得

    Perl 可能用于游戏逻辑的脚本编写,或者在数据预处理阶段进行大量的文本处理工作,比如地图数据的生成、配置文件的处理等。而 Shell 则可以用来创建自动化的测试脚本,或者用于游戏服务器的管理和维护。 总结来说,...

    DOSTHdaily:每天做一点点东西,一点点想法,一点点代码,花费一点点时间

    【描述】"DOSTHdaily" 这个项目的描述简洁明了,它强调的是每天投入“一点点”——一点点时间、一点点想法、一点点代码。这样的理念对于程序员或者任何需要持续学习和创作的人来说非常有益,因为它提倡的是持之以恒...

    mybatis和一点点spring的东西

    每个方法对应一个SQL语句,通过配置文件或者注解将接口方法与SQL映射文件关联起来。MyBatis的Executor执行器负责执行SQL,ResultHandler处理查询结果,ParameterHandler设置SQL参数,而StatementHandler则对SQL语句...

    mysql一点点深入学习.zip

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)进行..."kwan1117"可能是某个教程或资料的作者,这个文件可能包含关于这些主题的详细讲解和示例,是进一步学习MySQL的好资源。

    书店后台管理(简单版--->样式只做了一点点...)

    【标题】 "书店后台管理(简单版--->样式只做了一点点...)" 指的是一个基于Java技术栈的图书管理系统,它可能是为书店提供后台管理功能的简易版本,侧重于核心业务逻辑,可能在界面样式设计上投入较少。 【描述】 ...

Global site tag (gtag.js) - Google Analytics