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的热部署就完成了。

原文地址:https://www.cnblogs.com/warrior4236/p/13274412.html