springboot-devtools

springboot提供了一组开发工具 devtools
devtools:热部署 只要引入了这个依赖 当classpath下文件发生变化的时候 就会自动重启
静态资源和页面模板变更是不会触发的
在这里插入图片描述

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.akk</groupId>
    <artifactId>devtools</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>devtools</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         导入了devtools 自动添加的optional = true 是为了方式devtools传递到其他模块中 maven是由场地性的
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

添加代码块启动项目

package org.akk.devtools;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello world";
    }
}

更改返回内容

package org.akk.devtools;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello world:akk";
    }
}

不需要停止项目 只需要重新build项目即可 这就是热部署
在这里插入图片描述

变更时 自动编译(即时编译)
勾选下图红线处
在这里插入图片描述
确认完毕后
control + alt + shift + /

选择Registry
勾选下图内容
在这里插入图片描述

从默认的不触发重启的目录中除去static目录  即static目录中发生变化也会触发重启
spring.devtools.restart.exclude=classpath:/static/**

把static目录添加到restart中去,即static发生变化也会触发重启
spring.devtools.restart.additional-paths=src/main/resource/static
        
spring.devtools.restart.trigger-file=.trigger-file
创建.trigger-file文件 当.trigger-file文件和代码都变动时触发重启

实际上静态资源不需要重启热部署

devtools中默认嵌入了liveReload服务器 解决静态资源的热部署问题 资源变化会自动的触发浏览器的跟新

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello</h1>
</body>
</html>

当修改hello为hello!!!
直接刷新浏览器 就会自动的更新页面

如果不想自动跟新 添加配置
spring.devtools.livereload.enabled=false

如果引入了依赖 想不适用该功能
spring.devtools.restart.enabled =false
或者如下配置

@SpringBootApplication
public class DevtoolsApplication {
    public static void main(String[] args) {
        System.setProperty("spring.devtools.livereload.enabled","false");
        SpringApplication.run(DevtoolsApplication.class, args);
    }
}

发布了35 篇原创文章 · 获赞 1 · 访问量 618

猜你喜欢

转载自blog.csdn.net/weixin_39232166/article/details/104786607