IDEA+DevTools实现热部署功能

 
开发IDE: Intellij IDEA 2018.1 SpringBoot:1.5.9.RELEASE
热部署
  你们都知道在项目开发过程当中,经常会改动页面数据或者修改数据结构,为了显示改动效果,每每须要重启应用查看改变效果,其实就是从新编译生成了新的Class文件,这个文件里记录着和代码等对应的各类信息,而后Class文件将被虚拟机的ClassLoader加载。
而热部署正是利用了这个特色,它监听到若是有Class文件改动了,就会建立一个新的ClaassLoader进行加载该文件,通过一系列的过程,最终将结果呈如今咱们眼前。
 
类加载机制
  Java中的类通过编译器能够把代码编译为存储字节码的Class文件,该Class文件存储了各类信息,最终要加载到虚拟机中运行使用。
  类加载机制(摘自《深刻理解 Java 虚拟机》)
  虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终造成能够被虚拟机直接使用的Java类型。
 
spring-boot-devtools 自动重启(热部署)
  在激活了开发者工具后,ClassPath里对文件作任何修改都会触发应用程序重启。为了让重启的速度够快,不会修改的类(第三方JAR包)都加载到了基础类加载器里,而应用程序的代码则会加载到一个单独的重启类加载器里。检测到变动时,只会重启类加载 器重启。
  有些ClassPath里的资源变动后不须要重启应用程序。像Thymeleaf这样的视图模板能够直接编辑,不用重启。在/static 或 /public里的静态资源也不用重启应用程序,因此Spring Boot开发者工具在重启时排除掉了以下目录:/META-INF/resources、/resources、/static、/public、/templates。
 
1、POM集成

下面这一步,我本身测试发现是不须要设置的。可是有网友说须要设置才生效,这个看我的状况,酌情设置。spring

configuration.fork : Flag to indicate if the run processes should be forked. {@code fork} is
automatically enabled if an agent, jvmArguments or working directory are specified,
or if devtools is present
 
2、IDEA工具启动自动编译功能
3、IDEA 设置为在程序运行过程当中,依然容许自动编译
操做: ctrl + shift + alt + /,选择Registry,勾选勾上 Compiler autoMake allow when app running
 
执行完上述的操做步骤后,咱们的devtools热部署集成就完成了。
 
  • 默认状况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,可是会从新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
  • 若是想改变默认的设置,能够本身设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会致使restart操做了。
  • 若是要在保留默认设置的基础上还要添加其余的排除目录:spring.devtools.restart.additional-exclude
  • 若是想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围
相关文章
相关标签/搜索