微服务:本地热部署

简介

在项目开发中,难免会经常修改代码来验证一些问题,如果每次修改都需要进行重新关闭、启动这样的操作会让人有点不爽,如果能实现代码的热部署就好了。

所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。通俗来讲,热部署就是在修改代码后,不需要重新启动服务器,就可以加载修改后的代码,看到修改后的效果。对于 IDEA 来说,热部署就是不需要反复的通过开始、停止来进行项目的启动,而是修改代码保存后自动加载修改后的代码。

Spring Boot 提供了热部署能力。可以使用 Spring Boot Loader 的方式,也可以使用 Spring Boot Devtools的方式来进行,二者实现方式是不同的,大致总结如下:

Spring Boot Loader:真正的热部署。

Spring Boot Devtools:重新部署来实现热部署。

这两种热部署也是本地热部署,真正的远程服务器热部署方案另有方案,这个不是今天分享的点后续牵涉到部署方案再说!今天只分享如何使用 devtools 实现 Spring Boot 项目的热部署。


朋友做了一个关于 人工智能的教程,教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!点 这里 可以跳转到教程,对人工智能感兴趣的同学可以了解一下。

spring-boot-devtools

在 IDEA 中使用 devtools 需要修改 IDEA 的设置和工程的 pom 文件,具体操作步骤如下。

1、修改pom.xml文件,增加devtools

pom.xml 文件中的 dependency 下增加 devtools,如下:

1
2
3
4
5
6
7
<!--Devtools-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>

在 build 标签下增加 configuration/fork 配置,如果没有该项配置,devtools 不会起作用,即应用不会重启。

1
2
3
4
5
6
7
8
9
10
11
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>

2、修改IDEA编译选项

在IDEA中打开 File/Settings,如下图所示:

1555860471904

3、修改IDEA中的Registry

在 IDEA 中 Help/Find Action...,打开下面的对话框,输入registry 进行搜索,如下图:

1555860471904

双击 Registry,出现下面弹框,如图操作,选中 Compiler autoMake allow when app running 即可。

1555860471904

也可以使用快捷键 ctrl + shift + alt + / 打开 Registry,如图:

1555860471904

4、重新启动项目

重新运行项目进行验证。

1
2
3
4
@RequestMapping(value = "/user")
public String user() {
return "Greate user!";
}

浏览器打开:http://localhost:8080/user 可以看到效果。

修改原来的 user 方法和增加一个 user2 方法,再来验证。

1
2
3
4
5
6
7
8
9
@RequestMapping(value = "/user")
public String user() {
return "Greate user, welcome!";
}
@RequestMapping(value = "/user2")
public String user2() {
return "Greate user!";
}

分别在浏览器打开:http://localhost:8080/userhttp://localhost:8080/user2

1555860471904

1555860471904

现在不需要在 IDEA 中重新启动、关闭这种麻烦操作了。

如果你足够细心就会发现,使用 devtools 后,每次修改控制台自动的重新启动了 Spring Boot 项目,所以 devtools 是使用了重新部署的方式从而实现了热部署的功能。

注意几个问题

1、代码修改不会立即生效

随着工程越来越大,修改代码或者配置后需要稍等几秒钟(一般3s以内)就会自动重新启动工程,控制台就会看到日志的输出。

2、代码修改后控制台没有自动的重新启动工程

这个就需要按照这篇文章说的,重新检查一下如下设置:

  • pom 文件,检查一下是否把必要的配置被修改了。
  • IDE 的设置是否和本文一致。

改变,从你我相识开始~

坚持原创技术分享!