开发者

SpringBoot集成Devtools实现热更新

开发者 https://www.devze.com 2024-08-15 10:36 出处:网络 作者: HBLOG
目录1.什么Devtools?devtool的原理?为何会自动重启?2.代码工程实现目的pom.XMLcontrollerapplication.properti编程客栈esideal配编程客栈置代码仓库3.测试1.什么Devtools?
目录
  • 1.什么Devtools?
    • devtool的原理?为何会自动重启?
  • 2.代码工程
    • 实现目的
    • pom.XML
    • controller
    • application.properti编程客栈es
    • ideal配编程客栈
    • 代码仓库
  • 3.测试

    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>
        </dependenciandroides>
        <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.additiona编程l-paths=src/main/java
    spring.devtools.restart.exclude=static/www.devze.com**
    

    ideal配置

    在Settings->Build,Excution,Deployment ->Compiler勾选Build project automatically

    SpringBoot集成Devtools实现热更新

    注意:IDEA 2021 及更高版本 compiler.automake.allow.when.app.running这个选项的配置,改到 settings - Advanced Settings 这里了,如下:

    SpringBoot集成Devtools实现热更新

    以上只是一些关键代码,所有代码请参见下面代码仓库

    代码仓库

    • https://github.com/Harries/springboot-demo(devtools)

    3.测试

    • 启动Spring Boot应用
    • 访问http://127.0.0.1:8080/hello,查看借口返回借口
    • 修改hello接口返回值,再次访问接口,此时不用重启应用就可以看到最新的值了

    以上就是SpringBoot集成Devtools实现热更新的详细内容,更多关于SpringBoot Devtools热更新的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号