《SpringBoot篇》06.超详细热部署教学

简介: 《SpringBoot篇》06.超详细热部署教学

1.热部署简介


说明:

 热部署指的是,当你程序改动之后,服务器进行自动重启,加载改动后的项目,不用手动重启。


注:

 这里讲的是springboot工程的热部署实现方式。


2.springboot项目热部署实现原理


基于springboot开发的web工程其实有一个显著的特征,就是tomcat服务器内置了,服务器是以一个对象的形式在spring容器中运行的。简单说就是再搞一个程序X在spring容器中盯着你原始开发的程序A不就行了吗?确实,搞一个盯着程序A的程序X就行了,如果你自己开发的程序A变化了,那么程序X就命令tomcat容器重新加载程序A就OK了。并且这样做有一个好处,spring容器中东西不用全部重新加载一遍,只需要重新加载你开发的程序那一部分就可以了,这下效率又高了,挺好。


下面就说说,怎么搞出来这么一个程序X,肯定不是我们自己手写了,springboot早就做好了,搞一个坐标导入进去就行了。


3.手动启动热部署


步骤①:导入开发者工具对应的坐标


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

步骤②:构建项目,可以使用快捷键激活此功能


image.png


对应的快捷键一定要记得


<CTRL>+<F9>

以上过程就实现了springboot工程的热部署,是不是挺简单的。不过这里需要把底层的工作工程给普及一下。


重启与重载


一个springboot项目在运行时实际上是分两个过程进行的,根据加载的东西不同,划分成base类加载器与restart类加载器。


base类加载器:用来加载jar包中的类,jar包中的类和配置文件由于不会发生变化,因此不管加载多少次,加载的内容不会发生变化

restart类加载器:用来加载开发者自己开发的类、配置文件、页面等信息,这一类文件受开发者影响

当springboot项目启动时,base类加载器执行,加载jar包中的信息后,restart类加载器执行,加载开发者制作的内容。当执行构建项目后,由于jar中的信息不会变化,因此base类加载器无需再次执行,所以仅仅运行restart类加载即可,也就是将开发者自己制作的内容重新加载就行了,这就完成了一次热部署的过程,也可以说热部署的过程实际上是重新加载restart类加载器中的信息。


4.自动启动热部署


自动热部署其实就是设计一个开关,打开这个开关后,IDE工具就可以自动热部署。因此这个操作和IDE工具有关,以下以idea为例设置idea中启动热部署。


步骤①:设置自动构建项目


打开【File】,选择【settings…】,在面板左侧的菜单中找到【Compile】选项,然后勾选【Build project automatically】,意思是自动构建项目


image.png


自动构建项目选项勾选后


步骤②:允许在程序运行时进行自动构建


使用快捷键【Ctrl】+【Alt】+【Shit】+【/】打开维护面板,选择第1项【Registry…】


image.png


在选项中搜索comple,然后勾选对应项即可,搜索就是直接打complier就可以。在点击右下角Restire就可以了。


image.png

这样程序在运行的时候就可以进行自动构建了,实现了热部署的效果。


注:

idea设置当idea工具失去焦点5秒后进行热部署。其实就是你从idea工具中切换到其他工具时进行热部署,比如改完程序需要到浏览器上去调试,这个时候idea就自动进行热部署操作。


5.参与热部署监控的文件范围配置


当修改项目中的文件时,发现其实并不是所有的文件修改都会激活热部署的,原因在于在开发者工具中有一组配置,当满足了配置中的条件后,才会启动热部署,配置中默认不参与热部署的目录信息如下:


/META-INF/maven

/META-INF/resources

/resources

/static

/public

/templates

以上目录中的文件如果发生变化,是不参与热部署的。如果想修改配置,可以通过application.yml文件进行设定哪些文件不参与热部署操作


spring:
  devtools:
    restart:
      # 设置不参与热部署的文件或文件夹
      exclude: static/**,public/**,config/application.yml

6.关闭热部署


线上环境运行时是不可能使用热部署功能的,所以需要强制关闭此功能,通过配置可以关闭此功能。


spring:
  devtools:
    restart:
      enabled: false

如果当心配置文件层级过多导致相符覆盖最终引起配置失效,可以提高配置的层级,在更高层级中配置关闭热部署。例如在启动容器前通过系统属性设置关闭热部署功能。


@SpringBootApplication
public class SSMPApplication {
    public static void main(String[] args) {
        System.setProperty("spring.devtools.restart.enabled","false");
        SpringApplication.run(SSMPApplication.class);
    }
}


相关文章
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的教学管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的教学管理系统附带文章源码部署视频讲解等
45 8
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的教学仪器设备销售网站附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的教学仪器设备销售网站附带文章源码部署视频讲解等
29 1
|
2月前
|
测试技术 Windows
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)(3)
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)
21 1
|
2月前
|
数据库 数据安全/隐私保护 数据库管理
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)(2)
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)
21 1
|
2月前
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)(1)
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)
28 1
|
3月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的数据库课程在线教学的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的数据库课程在线教学的详细设计和实现(源码+lw+部署文档+讲解等)
39 2
|
3月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的教学资源管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的教学资源管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
65 2
|
3月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的教学评价管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的教学评价管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
29 2
|
3月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学多媒体教学管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学多媒体教学管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
28 5
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学多媒体教学管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学多媒体教学管理系统附带文章源码部署视频讲解等
27 0