上一篇只是主要说了springboot启动流程。刚刚想起来里面的tomcat啥时候启动的,还有设置application怎么改变tomcat端口号的。
一步步走。
在org.springframework.boot.SpringApplication
中的public ConfigurableApplicationContext run(String... args) {。。。}
方法中,我打了一个断点。F8往下走。
SpringApplication
所以回去看
refreshContext(context)
这个方法。F7进去
SpringApplication
然后继续F7进去看看这个
refresh(context)
SpringApplication
继续进去看refresh
EmbeddedWebApplicationContext
最终来到了
AbstractApplicationContext
的refresh()
然后慢慢F8看控制台输出,有兴趣的可以把这方法里面的每个方法都看一遍。我只看Tomcat输出
AbstractApplicationContext
那就进入这个
onRefresh()
看看。AbstractApplicationContext
这个super.onRefresh是初始化主题资源。
进入createEmbeddedServletContainer()
,然后F7进去
EmbeddedWebApplicationContext
然后F8走到上面断点的地方,进去之后返回的是
F8回到刚刚getEmbeddedServletContainer
方法的地方。F7再进去
TomcatEmbeddedServletContainerFactory
F8走完回来,就会出现
这里tomcat就准备好了,但是问题来了,什么时候启动的,而且什么时候把自己设置的端口号放进去的。
F8回到
AbstractApplicationContext.refresh()
,onRefresh走完了,继续往下走AbstractApplicationContext
进去
EmbeddedWebApplicationContext
看看上面的
startEmbeddedServletContainer()
EmbeddedWebApplicationContext
进入
start()
方法看看TomcatEmbeddedServletContainer
tomcat端口号就是从
Connector connector = this.tomcat.getConnector();
读取port然后启动,那么问题来了,这个port什么时候注入进去的,昨天我提到过有各种**Properties类去读取这些配置文件。直接去点击service.port,会发现直接跳转到
ServerProperties
启动的时候,就通过@EnableAutoConfigration去注入了。
然后往下走就去启动tomcat,切换状态等等。终于走完了,找的眼花。
我的版本是1.5.2,看了一眼1.5.4,好像代码大体一眼,具体有点区别,但是影响不大,2.0版的没看,以后再说吧。