springboot 系列教程八:devtools热部署

springboot 能实现热部署的方式有很多种,官方推荐使用 devtools 热部署,所以在此对其他热部署不做介绍

热部署原理

spring-boot-devtools 模块能够实现热部署,添加类、添加方法、修改配置文件、修改页面等都能实现热部署。原理就是重启项目,但比手动重启快多了,其深层原理是使用了两个ClassLoader。一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的 restart ClassLoader 被丢弃,重新创建一个 restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启效果

添加依赖

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional><!--不能被其它模块继承-->
     <scope>runtime</scope><!--只在运行时起作用,打包时不打进去-->
</dependency>

只要添加依赖,当你改完代码点击如下按钮 build 就会热发布

注意点

  1. 如果使用了 thymeleaf,那一定要配置关闭缓存,否则修改了 html,build 后也看不到效果
spring:
  thymeleaf:
    cache: false
  1. 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public 这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools 内嵌了一个 LiveReload Server,当资源发生改变时,浏览器刷新)
  2. 如果想改变默认的设置,可以自己设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会导致 restart 操作了
  3. 如果要在保留默认设置的基础上还要添加其他的排除目录:spring.devtools.restart.additional-exclude=/目录名
  4. 如果想要使得当非 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 浏览器会自动刷新

转载于:https://my.oschina.net/zhoumj/blog/3039563

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值