catalina的启动过程

来源:互联网 发布:磊科nw336驱动 mac 编辑:程序博客网 时间:2024/06/06 12:30
实现类:
    qualified name:org.apache.catalina.startup.Catalina

catalina的启动主要是调用了三个方法:
    1、setAwait:设置服务启动之后是否进入等待状态,true则等待
    2、load:加载配置文件config/server.xml,创建并初始化server

    3、start:启动服务器

方法一:

public void setAwait(boolean b) {    this.await = b;}
主要用来设置await属性,await属性会在start方法中的服务器启动完之后来判断是否进入等待状态
方法二:

public void load() {        long t1 = System.nanoTime();        省略创建server代码,使用Digester来创建        try {            this.getServer().init();        } catch (LifecycleException var24) {            if(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")) {                throw new Error(var24);            }            log.error("Catalina.start", var24);        }        long t2 = System.nanoTime();        if(log.isInfoEnabled()) {            log.info("Initialization processed in " + (t2 - t1) / 1000000L + " ms");        }}
load方法是根据配置文件config/server.xml创建server对象,并赋值给server属性(通过Digester完成),然后调用init方法。

方法三:

public void start() {    if(this.getServer() == null) {        this.load();    }    if(this.getServer() == null) {        log.fatal("Cannot start server. Server instance is not configured.");    } else {        long t1 = System.nanoTime();        try {            调用server的start方法来启动服务器            this.getServer().start();        } catch (LifecycleException var7) {            log.fatal(sm.getString("catalina.serverStartFail"), var7);            try {                this.getServer().destroy();            } catch (LifecycleException var6) {                log.debug("destroy() failed for failed Server ", var6);            }            return;        }        long t2 = System.nanoTime();        if(log.isInfoEnabled()) {            log.info("Server startup in " + (t2 - t1) / 1000000L + " ms");        }        注册关闭钩子        if(this.useShutdownHook) {            if(this.shutdownHook == null) {                this.shutdownHook = new Catalina.CatalinaShutdownHook();            }            Runtime.getRuntime().addShutdownHook(this.shutdownHook);            LogManager logManager = LogManager.getLogManager();            if(logManager instanceof ClassLoaderLogManager) {                ((ClassLoaderLogManager)logManager).setUseShutdownHook(false);            }        }        进入等待状态        if(this.await) {            this.await();            this.stop();        }    }}
catalina的start方法主要是调用了server的start方法来启动服务器,并根据await属性判断是否让程序进入等待状态。
1、判断server是否存在,如果不存在则调用load方法初始化server
2、调用server的start方法来启动服务器
3、注册关闭钩子,并根据await属性判断是否进入等待状态
4、进入等待状态会调用await方法和stop方法,await方法会直接调用server的await方法
   server的await方法会内部执行一个while循环,当循环退出,就会执行stop方法从而关闭服务器。


原创粉丝点击