Mycat启动类源码解读

来源:互联网 发布:中国 云计算 政策支持 编辑:程序博客网 时间:2024/05/23 12:38


/**

 * @author mycat
 */
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);
        }
    }

}



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、移植性差
适用:自行选择

0 0