SpringBoot热部署配置方法详解

 更新时间:2022年11月04日 08:52:12   作者:己不由心王道长  
在实际开发中,每次修改代码就需要重启项目,重新部署,对于一个后端开发者来说,重启确实很难受。在java开发领域,热部署一直是一个难以解决的问题,目前java虚拟机只能实现方法体的热部署,对于整个类的结构修改,仍然需要重启项目

前言

我们在了解一个东西的时候,总是喜欢问的就是为什么要?就是为什么我们需要这个,至少你要告诉我用这个的好处是什么;知道了需求然后学习,效率会好一些。

所以,我们为什么要学习热部署?想象一下这个情况,我们在开发的过程中,每次修改都要重启服务器才能够去重新部署项目,在项目较小的情况下还能忍受,但是如果做的是一个大型项目,部署一次消耗的时间成本很高。

所以热部署的作用 就是为我们免去这些时间上的损耗。热部署是更改代码或者配置直接生效,不用重新启动运行,这就是热部署。

手动启动热部署

热部署种类

实现热部署的方式有3种:

1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动

2.使用springloaded本地加载启动,配置jvm参数

3.使用devtools工具包,即开发者工具,归spring管理,操作简单,但是每次需要重新部署。

但是我们这里只介绍第三种,开始吧

手动进行热部署

  • 热部署既然是对项目的部署,首先我们至少有个简单点的项目
  • 老生常谈的创建项目我就直接上代码了

首先导入开发者工具:

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

上面导入了开发者工具的坐标,可以看出这是一个归spring管理的工具,true表示两个项目之间依赖不传递,这个没必要深究。

开启热部署: 快捷键ctrl+F9

或者:

关于热部署的小知识:

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
  • 重载(Reload):jar包,加载位置为base类加载器,我们启用热部署的时候,其实用的就是重启,因为我们依赖的哪些jar包,基本上是不会发生改变的,如果热部署的方案是重载,那就消耗了很多时间去重新加载这些不会改变的jar,没必要。

这里当我们每次对代码进行修改以后,都需要手动的去build,有没有不用自己手动的呢?有,自动启动热部署来了。

自动启动热部署

我们知道每次修改都手动一下build,有点麻烦,所以有了自动启动热部署。

第一步:settings——>build——>compiler

把红框里的东西打上勾。

第二步:我们需要找一个叫compiler.automake.allow.whenapp.running的key

快捷键:CTRL+alt+shift+/(这个有时候是有问号的才生效)

找了一圈没找到,什么情况呢?

原来是因为idea的版本不同,在低版本idea工具中适用以上方法,我使用的idea版本是2021版,需要另一种打开方式:

快捷键:ctrl+alt+s打开settings——>tools——>advanced settings(高级设置)——>勾选下图这个选项即可

自动启动热部署的激活方式:IDEA失去焦点后五秒钟启动热部署。

热部署范围配置

默认不触发重启的目录列表

/META-INF/maven

/META-INF/resources

/resources

/static

/public

/templates

什么意思呢?就是你更改这几个目录里的东西并不会触发热部署

除了默认的以外,我们还可以手动的配置不触发热部署的文件、目录、或者包

spring:
  devtools:
    restart:
      exclude: com/example/controller/*,com/example/entity/*

可以看到restart(重启)下面有exclude,翻译为中文就是除了什么之外,在后面可以配置不触发热部署的相关信息,可以配置多个,以逗号隔开。

热部署的关闭

我们可以开启热部署,当然也可以关闭热部署,一个热部署好关闭,但是如果在多个配置文件都设置了热部署,会不会起冲突,一个一个手动关闭,也确实浪费时间。

有没有什么办法可以禁用热部署的方法呢?有的,我们首先要了解一下属性加载的优先级:

其他看不到没事,我们看到第三个,Config data(such as application.properties),这不就是SpringBoot配置文件嘛。就是说我们的配置文件加载优先级处于第三,那就好办了,如果我们要禁用热部署,那么我们只需要在属性加载优先级高的地方先给它干掉,那属性低的加载到的时候,看到我们已经不同意它进行热部署了,它不就禁用了吗?

我们再找找,一看发现第6个,Java System properties(System.getProperties)不就是老熟人吗?不熟?

System.out.println("鸡你太美");

在javaSe阶段我们就学习过,它也是一个类。不过在这里它可以用来设置配置属性

好了,都了解了,接下来就是设置了

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

分析,上面这个表示设置一个配置把restart.enabled设为false,而且是在SpringApplication.run之前设置,这样在整个应用没有去加载配置文件是就把更高级的配置设置好了。

总结

本文章是在仓促之下记的相关笔记和个人理解,有不对的地方希望大佬们在评论区中指点,鄙人再加以改正,万分感谢。

到此这篇关于SpringBoot热部署配置方法详解的文章就介绍到这了,更多相关SpringBoot热部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现远程桌面的实例代码

    java实现远程桌面的实例代码

    下面小编就为大家分享一篇java实现远程桌面的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Hibernate懒加载之<class>标签上的lazy

    Hibernate懒加载之<class>标签上的lazy

    这篇文章主要介绍了Hibernate懒加载之<class>标签上的lazy,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Idea2022版本配置SpringBoot热部署的教程

    Idea2022版本配置SpringBoot热部署的教程

    这篇文章主要介绍了Idea2022版本配置SpringBoot热部署的教程,包括添加依赖及更改IDEA设置的方法,本文图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java GC 机制与内存分配策略详解

    Java GC 机制与内存分配策略详解

    这篇文章主要介绍了Java GC 机制与内存分配策略详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • 浅谈Java 并发的底层实现

    浅谈Java 并发的底层实现

    这篇文章主要介绍了浅谈Java 并发的底层实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • SpringBoot 文件或图片上传与下载功能的实现

    SpringBoot 文件或图片上传与下载功能的实现

    这篇文章主要介绍了SpringBoot 文件或图片上传与下载功能的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java通过URL类下载图片的实例代码

    Java通过URL类下载图片的实例代码

    这篇文章主要介绍了Java通过URL类下载图片,文中结合实例代码补充介绍了java通过url获取图片文件的相关知识,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Springboot任务之异步任务的使用详解

    Springboot任务之异步任务的使用详解

    今天学习了一个新技能SpringBoot实现异步任务,所以特地整理了本篇文章,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Springmvc文件上传实现流程解析

    Springmvc文件上传实现流程解析

    这篇文章主要介绍了Springmvc文件上传实现流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring Boot集成Druid出现异常报错的原因及解决

    Spring Boot集成Druid出现异常报错的原因及解决

    Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。本文讲述了Spring Boot集成Druid项目中discard long time none received connection异常的解决方法,出现此问题的同学可以参考下
    2021-05-05

最新评论