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);
}
}