热部署原理分析: 使用类加载器(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
完成!
