SpringBoot中使用热部署(DevTools)

使用热部署,可以让我们在项目中修改完代码后,就能自动执行编译并重启(比停掉服务重启要快的多)。

 

在需要热部署的项目中引入DevTools依赖(默认静态资源修改是不会重启)即可,或者在全局父Maven模块中引入,或者可以单模块引入然后设置防止其依赖传递。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <!--  防止将 devtools传递到其他模块中 -->
            <optional>true</optional>
        </dependency>

一、实现方式

这里使用 IDEA,创建一个 SpringBoot项目。引入DevTools依赖即可使用热部署,使用方式如下:

方式一:

直接启动项目,会看到有个这个“锤子” 图标。 我们修改完代码,然后点击它,即可重启。

方式二:自定义监控资源目录重启

    这里我们可以配置 需要重启的目录。在application配置文件中来设置,有两种方式

1)排除

# 从不触发重启的目录中除去 static下的目录,即static目录下的文件发生变化就会触发重启
spring.devtools.restart.exclude=classpath:/static/**

2)添加

# 将static目录下的文件添加到触发重启的目录中
spring.devtools.restart.additional-paths=src/main/resources/static

 配置之后,添加的目录就会实现热部署,还是点击那个 “锤子” 图标。

方式三:手动控制文件来重启项目

 自定义一个文件(比如:.trigger-file1),内容无所谓,只要这个文件发生变化,就会实现热部署,还是点击那个 “锤子” 图标。

# 手动控制重启项目,只需要.trigger-file1文件发生变化即可,
spring.devtools.restart.trigger-file=.trigger-file1

方式四:设置代码发生变化即可重启,不需要点击那个 “锤子” 图标。

 这里需要设置两个东西。

1、点开菜单 【File】-【Settings】-【Build,Execution,Deployment】-【Compiler】-勾选右侧的【Build project automatically】

2、然后按 Ctrl + Alt + Shift + /, 选择【Registry】点击,然后勾上【compiler.automake.allow.when.app.running】

    或者 按下Ctrl+Shift+A,打开搜索,输入【Registry】点击,然后勾上【compiler.automake.allow.when.app.running】

 

 

最后重启项目,代码发生变化就自动重启,不需要点击那个 “锤子” 图标。

 

方式五:禁用热部署

# 禁用devtools
spring.devtools.restart.enabled=false

个人不推荐使用方式四(开发中频繁更改,频繁重启对性能和工作效率不高),推荐方式三。

  

 

二、工作原理

工作原理使用了两个类加载器:

  • 一个Classloader加载那些不会改变的类(第三方Jar包),称为 Base ClassLoader
  • 另一个ClassLoader加载会更改的类,称为 Restart ClassLoader

所以我们有代码更改的时候,原来的Restart ClassLoader 被丢弃,重新创建一个 Restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

源码可以看一下 org.springframework.boot.devtools.autoconfigure.RemoteDevToolsAutoConfiguration配置类。

 

参考文章:

初探 SpringBoot DevTools 重启应用原理

 

—— Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值