springboot 热部署

参考文献:

https://blog.csdn.net/qq_42685050/article/details/81588584

https://juejin.cn/post/6844904121821036552

https://blog.csdn.net/lisheng19870305/article/details/94620716

近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

这里我没有把所有的方式都尝试一遍,只是使用了devtools的方式

总的来说,一共需要两个步骤:

第一步、先设置我们的pom.xml文件,加入依赖

首先是把下面代码在<dependencies>中

1

2

3

4

5

6

7

8

9

10

11

12

13

<!--添加热部署-->

  

<dependency>

  

<groupId>org.springframework.boot</groupId>

  

<artifactId>spring-boot-devtools</artifactId>

  

<optional>true</optional>

  

<scope>true</scope>

  

</dependency>

  

另外下面的代码是放在<build>  下面<plugins>里的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<plugin>

  

<!--热部署配置-->

  

<groupId>org.springframework.boot</groupId>

  

<artifactId>spring-boot-maven-plugin</artifactId>

  

<configuration>

  

<!--fork:如果没有该项配置,整个devtools不会起作用-->

  

<fork>true</fork>

  

</configuration>

  

</plugin>

  

第二步、设置IDEA的自动编译:

(1)File-Settings-Compiler勾选 Build Project automatically

(2)快捷键 ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

这样我们的热部署就完成了,可以再我们的项目中修改返回值,或者修改Mapping的value值后,在我们的页面中刷新试试,

我们的修改已经生效了,不用通过再关闭再开启项目查看了。


spring-boot-devtools 介绍

  • spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。

  • spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。

  • 由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。

配置热部署

  • 在 pom.xml 文件中,添加项目 spring-boot-devtools 依赖

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<!--热部署依赖-->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-devtools</artifactId>

    <optional>true</optional>

 </dependency>

<plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    <!--没有该项配置,热部署不会起作用-->

    <configuration>

        <fork>true</fork>

    </configuration>

 </plugin>

  

  • 在资源文件 application.properties 中进行热部署的相关配置

1

2

3

4

5

6

7

8

9

10

11

# 页面修改后立即生效,关闭缓存,立即刷新

spring.thymeleaf.cache=false

# 热部署生效

spring.devtools.restart.enabled=true

# 设置需要重启的目录

spring.devtools.restart.additional-paths=src/java/main

# 设置不需要重启的目录

spring.devtools.restart.exclude=static/**,public/**,WEB-INF/**

# 为 mybatis 设置,生产环境可删除

# restart.include.mapper=/mapper-[\\w-\\.]+jar

# restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

  

 

当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。

设置 IDEA 环境自动编译

在使用 IDEA 编译器时,需要设置自动编译。

  • 在编译器选项中勾选 Build project automatically 选项

  • 使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项

源码地址

springboot-devtools


具体步骤

一、开启IDEA的自动编译(静态)

具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。

二、开启IDEA的自动编译(动态)

具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

  • compiler.automake.allow.when.app.running -> 自动编译
  • compile.document.save.trigger.delay -> 自动更新文件

PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!

三、开启IDEA的热部署策略(非常重要)

具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。

image.png

四、在项目添加热部署插件(可选)

温馨提示:
如果因为旧项目十分臃肿,导致热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行免启动快速更新!!

具体步骤:在POM文件添加热部署插件

1

2

3

4

5

6

7

8

9

<dependency>

  

<groupId>org.springframework.boot</groupId>

  

<artifactId>spring-boot-devtools</artifactId>

  

<scope>runtime</scope>

  

</dependency>

  

五、关闭浏览器缓存(重要)

打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值