在Springboot项目中内嵌Tomcat时如何使用

  介绍

这篇文章给大家介绍在Springboot项目中内嵌Tomcat时如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

从TomcatEmbeddedServletContainer的this.tomcat.start()开始,主要是利用LifecycleBase对这一套容器(引擎、主机、上下文及包装)进行启动并发布诸如configure_start, before_init, after_start的lifecycleEvent事件给相应的监听器(如果有的话)。进入开始,因为此时状态是LifecycleState。新的,所以会执行初始化方法:

 

又是的LifecycleBase的init,只不过这次是StandardService (Tomcat),更新的LifecycleState状态为初始化发布before_init事件,StandardService的initInternal,超级之后是引擎。init,同现样引擎在也是初始化阶段,更新状态发布事件,然后进入StandardEngine的initInternal:

保护无效initInternal()抛出LifecycleException {//确保领域存在任何尝试之前开始//>//开始我们定义服务
  同步(servicesLock) {
  for (int i=0;我& lt;services.length;我+ +){
  服务[我].start ();
  }
  }

当前状态的服务会执行setStateInternal (LifecycleState。STARTING_PREP, null,假),然后到StandardService的startInternal方法,设置状态(LifecycleState.STARTING)不说了,接着是同步代码块中engine.start(),里面是引擎状态变更setStateInternal (LifecycleState。STARTING_PREP, null,假),startInternal中super.startInternal执行ContainerBase的对应方法,初始化记录器,然后((生命周期)领域).start(),开始方法里又是一个循环,从新的到初始化的状态变化,然后进入RealmBase的initInternal方法

, super.initInternal中MBeanServer,然后。containerLog=container.getLogger(),此处容器是StandardEngine Tomcat, x509UsernameRetriever=createUsernameRetriever (x509UsernameRetrieverClassName),参考:https://bz.apache.org/bugzilla/show_bug.cgi& # 63; id=52500;状态连续更新到初始化然后STARTING_PREP,发布的什么事件我就不写了,现在还在领域(简单的)中,接着是RealmBase的startInternal方法,它初始化了credentialHandler=new MessageDigestCredentialHandler()并将状态由改为了开始发布开始事件,接着又改状态了开始事件after_start,然后回到了StandardEngine (Tomcat)中,通过ContainerBase的findChildren方法找到了子容器:

在Springboot项目中内嵌Tomcat时如何使用