SpringBoot2.0整合热部署Devtools工具

it2025-11-26  5

前言

热部署原理分析: 使用类加载器(classloader重新读取字节码文件到jvm内存)如何纯手写一个热部署功能: 1.监听class文件是否有发生改变–版本号或者修改时间 2.如果class文件发生改变的,就是用classloader进行重新读取。

热部署可以用于在生产环境? 1.理论上可以那么做(不推荐) 2.本地开发–为了本地测试能够提高效率

一、项目文件目录 二、配置文件内容 1.AppDevTools

package com; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AppDevTools { public static void main(String[] args) { SpringApplication.run(AppDevTools.class, args); } }

2.IndexController

package com.zhongguancun.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class IndexController { // 有些工具会自带热部署功能 @RequestMapping("/indexDev") public String indexDev() { String result = "springboot 2.0-V4"; return result; } // 热部署类加载器 自带工具热部署功能--- springmvc装配 devtools 是采用重启机制 // @RequestMapping("/MyindexDev") // public String MyindexDev() { // String result = "springboot 2.0-V5"; // return result; // } }

3.pom.xml

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhongguancun</groupId> <artifactId>zhongguancun_devtools</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <!-- SpringBoot web 核心组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> </dependencies> </project>

三、效果演示 启动项目 访问:http://localhost:8080/indexDev 后台打开注释(注意观察 打开注释后项目会自动重启 说明Devtools成功整合) 访问:http://localhost:8080/MyindexDev

完成!

总结

devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现(这里注意不同的模板配置不一样)
最新回复(0)