本文介绍: 深层原理使用两个ClassLoader一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载更改的类,称为restart ClassLoader,这样在有代码更改时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间原理是在发现代码更改之后,重新启动应用,但是速度手动停止后再启动还要更快,更快指的不是节省出来的手工操作时间

📑前言

本文主要SpringBoot通过DevTools实现部署文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介大家好,我是青衿🥇
☁️博客首页:CSDN主页放风讲故事
🌄每日一句:努力一点,优秀一点
在这里插入图片描述

目录


为什么使用部署

没有使用部署的情况下,一个稍微大点的项目启动就要七八秒甚至十几秒的启动时间,当然这取决于你的机器性能,不过毫无疑问,不管你的机器性能如何强大,也耗不过日益增长项目体量,所以迫切需要无需重新启动项目也能将代码的增加修改同步服务器的手段。

可选的热部署插件

在Spring Boot项目中,Spring Boot官方提供你了Devtools部署模块通过maven方式导入就能使用。根据官方描述,Spring Boot Devtools插件使用了两种类加载器来加载资源:对于第三方jar使用base classloader加载,这类资源一般比较固定,不会发生改动;而对于项目中的经常需要变动代码类则使用restart classloader来加载。

Spring Boot Devtools什么

顾名思义,DevTools为Spring开发人员提供了一些便利的开发工具,其中包括:

代码变更应用自动重启
面向浏览器资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器
自动禁用模板缓存

在项目的开发中,当每次修改后台代码后都需要重启服务,这样降低了开发效率。下面将介绍在SpringBoot项目中使用DevTools实现[热部署]
springbootdevtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间

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

1、添加DevTools依赖pom.xml

pom.xml文件配置

        <!--部署相关依赖,布置到线上的时候要去掉--&gt;
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>

依赖的取值为runtime表示该依赖只在运行生效,不会被打包到最终的可执行文件中。这意味着该依赖只在开发过程中起作用,不会影响生产环境

2、编辑application.yml配置文件

application.yml配置文件中添加相关配置信息

spring:
  devtools:
    restart:
      enabled: true  #设置开启部署
      additional-paths: src/main/java #重启目录

这样配置后,当你修改了Java代码文件(位于src/main/java目录下)时,应用程序自动重启

3、IDEA的相关设置

(1)菜单:File → Settings → Build, Execution, Deployment → Compiler

右侧选项找到 Build project automatically 选项勾选,如下图

在这里插入图片描述

(2)快捷键 Ctrl + Shift + Alt + / ,点击Registry项。
在这里插入图片描述

然后找到 compiler.automake.allow.when.app.running 选项勾选,如下图
在这里插入图片描述

4.4 测试

public ResponseResult login(@RequestBody User user){
	System.out.println("无自动部署");
	System.out.println("无自动部署");
	System.out.println("无自动部署");
...
}

控制台输出
在这里插入图片描述
修改字段

	public ResponseResult login(@RequestBody User user){
		System.out.println("自动部署");
		System.out.println("自动部署");
		System.out.println("自动部署");
		...
}

几秒控制台自动运行
在这里插入图片描述

以上是springboot使用devtools示例可以根据自己的实际需求进行调整。

📑文章末尾

在这里插入图片描述

原文地址:https://blog.csdn.net/2301_80092713/article/details/134434900

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_50206.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注