01. Tomcat 启动流程解析
2022-03-20 13:55:47 0 举报
AI智能生成
Tomcat 启动流程解析
作者其他创作
大纲/内容
Bootstrap.main()启动入口
initClassLoaders()初始化 Tomcat 的三个类加载器
通过反射构造 Catalina 对象并赋值给【catalinaDaemon】对象
new Bootstrap().init()初始化 Bootstrap
把刚刚初始化的 BootStrap 赋值给【daemon】
解析传入参数 command 命令默认是 start,即没传入就是启动命令
parseServerXml(true)解析【server.xml】配置文件
globalNamingResources.init()初始化 JNDI 组件
engine.init()引擎初始化这里是【StandardEngine】组件
executor.init()判断是否配置了线程池,就执行初始化这里默认是没有
mapperListener.init()初始化 mapper 监听器
initServerSocket()初始化 ServerSocketChannel
initialiseSsl()初始化 ssl
NioEndpoint.bind()具体实例组件的绑定方法
bindWithCleanup()初始化并绑定端口号
endpoint.init()端口初始化这里是【NioEndpoint】组件
protocolHandler.init()协议处理器初始化这里是【Http11NioProtocol】组件
connector.init()获取所有的连接器,挨个初始化
service.init()获取所有的 services,挨个初始化这里是【StandardService】组件
getServer().init()这里是【StandardServer】组件
通过反射执行【catalinaDaemon】的 load() 方法
daemon.load(args)加载启动参数
globalNamingResources.start()启动 JNDI 组件
findChildren()查找容器中的所有虚拟主机【StandardHost】
给 pipeline 组装所有的 Valve
child.start()用线程池并发启动 Host,每一个 Host 被封装成 Callable这里是【StandardHost】组件
StandardPipeline.init()此时为新建状态,先执行 init() 完成初始化
Valve.init()此时为新建状态,先执行 init() 完成初始化
Valve.initInternal()执行具体阀门的启动方法
Valve.start()获取容器中的所有 Valve 阀门,挨个启动
pipeline.start()等上面所有的 Host 启动好才会启动管道这里是【StandardPipeline】组件
deployApps()异步并发部署服务
HostConfig.lifecycleEvent()【HostConfig】监听事件
setState(LifecycleState.STARTING)发布 STARTING 事件通知
super.startInternal()调用父类【ContainerBase】方法
engine.start()引擎启动这里是【StandardEngine】组件
executor.start()判断是否配置了线程池,就执行启动方法这里默认是没有
mapperListener.start()启动 mapper 监听器
判断当前是否有 work 线程池,没有就创建一个它是负责真正干活的线程池
initializeConnectionLatch()初始化连接计数限制器底层用的是 AQS,类似于 CountDownLatch
监听状态变更事件
pollerThread.start()启动一个 poller 拉取线程
它的作用是从 endpoint 中监听 socket 连接接收来自 8080 端口号的数据
startAcceptorThread()初始化一个接收者线程
endpoint.start()端口启动这里是【NioEndpoint】组件
protocolHandler.start()协议处理器启动这里是【Http11NioProtocol】组件
connector.start()获取所有的连接器,挨个启动
service.init()获取所有的 services,挨个启动这里是【StandardService】组件
getServer().start()调用 start() 方法启动这里是【StandardServer】组件
通过反射执行【catalinaDaemon】的 start() 方法
daemon.start()启动服务
serverSocket.accept()它是接收自 8005 端口的数据作用是用来发接收服务器指令,如【SHUTDOWN】
await()服务器 hang 住
Tomcat 启动原理启动入口是 Bootstrap.main()
0 条评论
下一页