springboot启动流程

springboot启动流程

2ca6479f92974b4c.png

手动撸springboot的Tomcat启动

Servlet容器初始化类

public class MyServletContainerInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        System.out.println("==============onStartup========================");
    }
}

测试主类

**
 * 手动启动tomcat
 *
 * @author zhouzx
 */
public class MyOwnTomcatApplication {
    public static void main(String[] args) throws InterruptedException, LifecycleException {
        Tomcat tomcat = new Tomcat();
        File baseDir = new File("c:/tmp/tomcat");
        tomcat.setBaseDir(baseDir.getAbsolutePath());
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(9090);
        tomcat.getService().addConnector(connector);
        tomcat.setConnector(connector);
        tomcat.getHost().setAutoDeploy(false);

        StandardContext context = new StandardContext();
        context.setName("/aa");
        context.setDisplayName("/aa");
        context.setPath("/aa");
        File docBase = new File("c:/tmp/tomcat-docbase");
        context.setDocBase(docBase.getAbsolutePath());
        context.addLifecycleListener(new Tomcat.FixContextListener());
        context.setUseRelativeRedirects(false);
        context.addServletContainerInitializer(new MyServletContainerInitializer(), Collections.emptySet());
        WebappLoader loader = new WebappLoader(context.getParentClassLoader());
        loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName());
        loader.setDelegate(true);
        context.setLoader(loader);
        tomcat.getHost().addChild(context);

        TomcatWebServer tomcatWebServer = new TomcatWebServer(tomcat, true);

        //模拟出错,程序一直运行,未关闭,TomcatWebServer的构造方法中有Tomcat的start方法
        int i = 1 / 0;
    }
}

代码地址spring-learn/springboot-learn-tomcat

转载于:https://my.oschina.net/u/866172/blog/2988939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值