SpringBoot实现热部署的三种方式

热部署,就是不需要停掉服务,可以线上改,改完立马生效。

1.为什么用热部署?

因为不启用热部署时每次更改java数据都要重启服务器影响开发效率。

2.热部署的实现原理?

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

3. 热部署的实现方式

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

1
2
3
4
5
6
7
8
<!--实现热部署-->
<!--devtools热部署-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional>
     <scope>true</scope>
 </dependency>

然后在Settings→Build→Compiler中将Build project automatically勾选上,最后按ctrl+shift+alt+/ 选择registy,将compiler.automake.allow.when.app.running勾选。另外,对于某些idea没有这个选项的,设置好其他的之后,ctrl+f9也是可以的。

(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),
实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的
(2)配置了true后在修改java文件后也就支持了自动部署,不过这种方式是属于项目重启,会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

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

-javaagent:<jar包地址> -noverify

3.使用devtools工具包,操作简单,但是每次需要重新部署

1、引入devtools依赖

在你的pom.xml配置文件中,引入devtools依赖包:

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

提示:

设置optional 为true,是避免大家微服务项目父子项目依赖继承冲突。

2、devtools的配置

1
2
3
4
5
6
spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署,false即不开启热部署
      additional-paths: src/main/java #指定热部署的目录
      exclude: test/**  #指定目录不更新

3、Intellij Idea修改

如果你是使用的idea工具开发,那你还需要改以下两个地方:

1、勾上自动编译或者手动重新编译 File -> Setting -> Build, Execution, Deployment -> Compiler:勾选 [Build project automatically]

演示截图如下:

SpringBoot实现热部署的三种方式

2、注册 Shift+Ctrl+Alt+/(Windows快捷键), 单击[Registry],勾选 [compiler.automake.allow.when.app.running]

快捷键:Shift+Ctrl+Alt+/ 后,会弹出如下界面:

SpringBoot实现热部署的三种方式

然后单击 Registry,找到 [compiler.automake.allow.when.app.running]把它勾选上。具体演示如下:

SpringBoot实现热部署的三种方式

到此,以上就完成了热部署的所有配置啦,你们记得配置完成后,重启idea!让所有配置都生效。

再次,若想验证热部署是否生效,你们可以做个简单测试(比如随便修改个接口地址啥的,然后用新接口地址去访问,验证修改代码是否在不手动启动项目的情况下生效等),我这里就不给大家演示了。

同时,如下是我从网上看到的一些注意事项,经实测确实如此,也希望大家在使用热部署的同时,也能少走些弯路。

具体如下:

  • package 打包时,不包含devtools工具。
  • 生产环境devtools将被禁用,如java -jar方式或者自定义的类加载器等都会识别为生产环境。
  • devtools会在windows资源管理器占用java进程,在开发工具里面杀不掉,只能手动kill掉,不然重启会选成端口被占用情况。
  • Thymeleaf无需配置spring.thymeleaf.cache: false,devtools默认会自动设置。
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开支付宝扫一扫,即可进行扫码打赏哦,您的支持,是我继续创作的动力。
点赞 (0)

中和威客保留所有权利,未经本站书面许可不得转载本站内容!文中观点不代表本站立场!

中和威客 小程序 SpringBoot实现热部署的三种方式 https://www.izhwk.com/archives/370

下一篇:

已经没有下一篇了!

常见问题
  • 您需要注册成为本站会员,然后再通过会员中心的升级VIP功能,方可成为本站的VIP会员。
查看详情
  • 首先您需要注册成为本站会员,然后到会员中心充值,充值后支付对应资源的查看金额即可查看付费内容。
查看详情

相关文章

评论
暂无评论
SpringBoot实现热部署的三种方式-海报

分享本文封面