springboot分析——servlet容器切换以及热部署
springboot是在spring基础上做了封装,将一些需要自定义的配置封装起来,简化了spring的启动流程,还支持内嵌web服务器,
简单部署。
一:springboot环境搭建
环境搭建比较简单,可以直接到springboot官网订制
二:将内置的tomcat servlet服务器切换为jetty服务器
1:首先看一下默认的servlet容器
从启动日志可以看出启动的Tomcat服务器:
2:修改依赖,排除掉tomcat的启动依赖,加入jetty的依赖
从启动日志看,程序已经被部署到了Jetty容器上
3:看一下怎么实现容器切换的?
自动配置工程内有个spring.factories,里面有个内嵌WebServerFactory的自动配置
根据类路径上不同的类来确定实例化webServer工厂的类别
@ConditionalOnMissingBean注解,如果容器中已经存在ServletWebServerFactory的对象,就不会再实例化了,确保只有一个servlet容器被实例化。
实例化不同的web服务器对象,然后注入到bean容器中。
在refresh方法中,有个预留的钩子方法,翻译过来就是:在指定的上下文子类中实例化其他指定的bean对象
在ServletWebServerApplicationContext中,调用onRefresh方法:
创建一个Tomcat容器对象:
到这里tomcat容器启动就成功了,其他的servlet启动流程一样,只是调用到不同的类。
三:springboot热部署
有时候我们希望修改完类或者配置文件后可以自动重启,那么热部署这个功能就显得非常有用
1:添加依赖和插件
<!--2: 热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins>
启动服务,这时日志打印的线程名称是 restartedMain
修改类的内容,然后保存,springboot后重启:
到这里,springboot的热部署就完成了。