Mycat之启动类MycatStartup代码阅读

public final class MycatStartup {

    private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";

    private static final Logger LOGGER = LoggerFactory.getLogger(MycatStartup.class);

    public static void main(String[] args) {

        //use zk ?

    //使用单例模式加静态代码块加载/myid.properties配置文件

    //如果配置文件中loadZk取值为true则会调用ZktoXmlMain类的loadZktoFile方法,

    // 否则不使用ZK,这段代码小刘的注释写的很漂亮,值得学习和表扬

        ZkConfig.getInstance().initZk();

        try {

        //检查是否设置SystemConfig中的SYS_HOME = "MYCAT_HOME"变量值

            String home = SystemConfig.getHomePath();

            if (home == null) {

                System.out.println(SystemConfig.SYS_HOME + "  is not set.");

                System.exit(-1);

            }

            // init

            //使用单例模式初始化配置文件为启动做准备:读取配置文件和启用scheduler调度器,

            //其中配置文件的加载使用的是java中的w3c的DocumentBuilderFactory-->DocumentBuilder,

            //这种代码比较底层。 dom  sax  dom4j的区别呢?此处没有用dom4j,估计是考虑到dtd验证问题

            MycatServer server = MycatServer.getInstance();

            //空方法啥也不干,以前可能用来初始化启动上述ZK,被注释掉代码  ZkConfig.instance().initZk();

            server.beforeStart();

 

            // startup

            //这个是个超级大方法,长达200多行,因此此段代码是个bad code,待优化

            server.startup();

            System.out.println("MyCAT Server startup successfully. see logs in logs/mycat.log");

        } catch (Exception e) {

        //SimpleDateFormat类不是线程安全的,所以在多线程的环境下,往往会出现意想不到的结果。

        //umberFormatException: multiple points

            SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);

            LOGGER.error(sdf.format(new Date()) + " startup error", e);

            System.exit(-1);

        }

    }

}



 

启用ZK的配置文件



 

启用ZK的代码



 

XML文件解析

Sax基于事件的访问,应用程序通过事件处理函数实现对xml文档的访问.

因为事件触发是有时序性的,
优点:1、无需将整个文档加载到内存中,所以内存消耗少.
       2 、推模型允许注册多个contentHandler.
缺点:1、没有内置的文档导航支持.
       2、不能随机访问xml文档.
       3、不支持原地修改xml.
       4、不支持名字空间作用域.
适合:对xml文档读取数据
小王老师曾说:SAX类似一个盲人去触摸一个漂亮女孩子一样,从头到脚只能触摸一次,即不可返回反复触摸,再摸就是非礼了。而DOM就可以反复了,因为它是整个加载到内存的,SAX是边读边解析的,解析完就丢弃


DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。也就是说,通过DOM树,应用程序可以对XML文档进行随机访问
优点:1、丰富的API集合,可以轻松导航.
        2、 整个DOM树加载到内存,允许随机访问.
缺点:1、整个xml文档必须一次解析完.
        2、整个DOM树都加载到内存中,内存要求高.
        3、一般的DOM节点对于必须为所有节点创建对象的对象类型绑定不太理想.
适用:对xml文档修改数据


DOM4J
DOM4J有更复杂的api,所以dom4j比jdom有更大的灵活性.DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的 hibernate 也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.
优点:1、灵活性最高
           2、易用性和功能强大、性能优异
缺点:1、复杂的api
      2、移植性差
适用:自行选择
 
单例模式:

单例模式的特征

构造函数私有化,不能产生对象,所以只能用类名调用,所有只能是静态函数。

缺点:弄不好,并发有问题

永久链接: http://gaojingsong.iteye.com/blog/2283961

预览文章: 【设计模式之单例模式】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值