2019独角兽企业重金招聘Python工程师标准>>>
springboot 能实现热部署的方式有很多种,官方推荐使用 devtools 热部署,所以在此对其他热部署不做介绍
热部署原理
spring-boot-devtools 模块能够实现热部署,添加类、添加方法、修改配置文件、修改页面等都能实现热部署。原理就是重启项目,但比手动重启快多了,其深层原理是使用了两个ClassLoader。一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的 restart ClassLoader 被丢弃,重新创建一个 restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启效果
添加依赖
只要添加依赖,当你改完代码点击如下按钮 build 就会热发布
注意点
- 如果使用了 thymeleaf,那一定要配置关闭缓存,否则修改了 html,build 后也看不到效果
spring:thymeleaf:cache: false
- 默认情况下,
/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 就会将该目录列入了监听范围
LiveReload Server
spring-boot-devtools 模块包括一个嵌入式 LiveReload 服务器,可用于在更改资源时触发浏览器刷新。LiveReload 浏览器扩展程序可从livereload.com
免费用于 Chrome,Firefox 和 Safari
如果您不想在应用程序运行时启动 LiveReload 服务器,则可以将spring.devtools.livereload.enabled
属性设置为 false
注意: 您一次只能运行一个 LiveReload 服务器。在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。如果从 IDE 启动多个应用程序,则只有第一个具有 LiveReload 支持。 我使用的是火狐浏览器,首先在插件库里搜索并且安装 LiveReload 插件
按照完成后浏览器右上角可以启动插件
此时当我改完 html 文件只需要点击 build 浏览器会自动刷新