SpringBoot集成Devtools实现热更新
作者:HBLOG
DevTools是开发者工具集,主要用于简化开发过程中的热部署问题,热部署是指在开发过程中,当代码发生变化时,无需手动重启应用,系统能够自动检测并重新加载修改后的代码,本文给大家介绍了SpringBoot集成Devtools实现热更新,需要的朋友可以参考下
1.什么Devtools?
DevTools是开发者工具集,主要用于简化开发过程中的热部署问题。 热部署是指在开发过程中,当代码发生变化时,无需手动重启应用,系统能够自动检测并重新加载修改后的代码,大大提高了开发效率
devtool的原理?为何会自动重启?
为什么同样是重启应用,为什么不手动重启,而是建议使用spring-boot-devtools进行热部署重启?
spring-boot-devtools使用了两个类加载器ClassLoader,一个ClassLoader加载不会发生更改的类(第三方jar包),另一个ClassLoader(restart ClassLoader)加载会更改的类(自定义的类)。 后台启动一个文件监听线程(File Watcher),监测的目录中的文件发生变动时, 原来的restart ClassLoader被丢弃,将会重新加载新的restart ClassLoader。 因为文件变动后,第三方jar包不再重新加载,只加载自定义的类,加载的类比较少,所以重启比较快
2.代码工程
实现目的
修改java类实现动态更新
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springboot-demo</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>devtools</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
controller
package com.et.devtools.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController public class HelloWorldController { @RequestMapping("/hello") public Map<String, Object> showHelloWorld(){ Map<String, Object> map = new HashMap<>(); map.put("msg", "HelloWorld 2222"); return map; } }
application.properties
spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java spring.devtools.restart.exclude=static/**
ideal配置
在Settings->Build,Excution,Deployment ->Compiler勾选Build project automatically
注意:IDEA 2021 及更高版本 compiler.automake.allow.when.app.running
这个选项的配置,改到 settings - Advanced Settings
这里了,如下:
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
3.测试
- 启动Spring Boot应用
- 访问http://127.0.0.1:8080/hello,查看借口返回借口
- 修改hello接口返回值,再次访问接口,此时不用重启应用就可以看到最新的值了
以上就是SpringBoot集成Devtools实现热更新的详细内容,更多关于SpringBoot Devtools热更新的资料请关注脚本之家其它相关文章!