Springboot热部署的两种实现方式

热部署

  Java1.4开始,JVM引入了HotSwap(热加载),它针对的是单个字节码文件,重新编译后不需要停机就可以加载使用新的class文件。基于此,实现了热部署,即修改代码后无需重启就可以加载修改的代码,热部署针对的是容器或者整个应用。关于热部署其实有两个部分:

  • 重启(restart):自定义开发代码,加载位置为restart类加载器
  • 重载(reload):jar包,加载位置为base类加载器

 而重启为什么快于重新启动项目呢?

  就使用spring-boot-devtools插件而言,重新启动项目的话,需要使用RestartClassLoader和JDK中的类加载器,而热部署的重启就只会使用RestartClassLoader

第一种实现方式(基于idea)

  只需要Edit Configuration修改如下

  

 

   然后在使用这个小锤子或者Ctrl+F9即可

  

 

   缺点:Java的虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作

第二种实现方式(基于spring-boot-devtools插件)

  我们只需要在我们的boot项目的maven依赖中加入devtools的依赖

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

  然后Ctrl+F9即可

实现自动热部署

  自动热部署功能开启有两步

  1. setting-->Build,Execution,Deployment-->Complier-->Build project automatically打上✔
  2. setting-->Advanced Settings-->Allow auto-make to start even if developed application is current running打上✔

  每次修改代码后,只需要鼠标失去在idea中的焦点五秒左右就会自动重启。

自定义不参与重启的排除项

  

 

 

   按如上图格式书写即可,注意用逗号分开,且不能有空格。

关闭热部署功能

复制代码
@SpringBootApplication
public class HotDeployApplication {

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

}
复制代码

 

  只需要设置spring.devtools.restart.enabled的属性为false。

posted @   lhbili  阅读(849)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示