SpringBoot实现热部署的三种方式

 更新时间:2023年12月26日 15:26:27   作者:Myovlmx  
本文主要介绍了SpringBoot实现热部署的三种方式,主要包括配置pom.xml文件,使用插件的执行命令mvn spring-boot:run启动项,使用springloader本地启动修改jvm参数,使用devtools工具包,感兴趣的可以了解一下

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

1.为什么用热部署?

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

2.热部署的实现原理?

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

3. 热部署的实现方式

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

		<!--实现热部署-->
       <!--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依赖包:

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

提示:

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

2、devtools的配置

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]

演示截图如下:

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

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

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

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

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

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

具体如下:

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

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

相关文章

  • Java日常练习题,每天进步一点点(13)

    Java日常练习题,每天进步一点点(13)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • java JDBC主要组件连接数据库及执行SQL过程示例全面详解

    java JDBC主要组件连接数据库及执行SQL过程示例全面详解

    这篇文章主要为大家介绍了java JDBC主要组件连接数据库及执行SQL的过程示例全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • java如何根据日期生成单号

    java如何根据日期生成单号

    这篇文章主要介绍了java如何根据日期生成单号问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Java键值对Pair的使用方式和操作实现

    Java键值对Pair的使用方式和操作实现

    键值对是一种常见的数据结构,它由一个唯一的键和与之关联的值组成,本文就来介绍一下Java键值对Pair的使用方式和操作实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 踩坑批量更新sql报错,实际sql能够正常执行的问题

    踩坑批量更新sql报错,实际sql能够正常执行的问题

    在项目工程迁移过程中,遇到了一个批量更新接口在新工程中报错的问题,通过分析,排除了代码错误的可能,最终发现是由于数据库连接配置不当导致的,在jdbc连接字符串中加入allowMultiQueries=true参数后,问题得以解决,这个参数的作用是允许SQL批量执行
    2022-12-12
  • Spring中的@ExceptionHandler注解详解与应用示例

    Spring中的@ExceptionHandler注解详解与应用示例

    本文详细介绍了Spring框架中的@ExceptionHandler注解的用法,包括基本用法、全局异常处理、结合@ResponseStatus注解以及返回值类型,通过示例展示了如何使用@ExceptionHandler注解处理不同类型的异常,并提供定制化的异常处理响应,需要的朋友可以参考下
    2024-11-11
  • Java集合框架中迭代器Iterator解析

    Java集合框架中迭代器Iterator解析

    这篇文章主要为大家简单介绍了Java集合框架中迭代器Iterator的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 简述Java异步上传文件的三种方式

    简述Java异步上传文件的三种方式

    这篇文章主要为大家详细介绍了Java异步上传文件的三种方式,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Java轻松实现批量插入或删除Excel行列操作

    Java轻松实现批量插入或删除Excel行列操作

    在职场生活中,对Excel工作表的行和列进行操作是非常普遍的需求,下面小编就来和大家介绍一下如何在Java中完成批量插入、删除行和列的操作吧
    2023-10-10

最新评论