springboot中使用devtools实现热部署及碰到的问题记录
1、背景
springboot ,jdk 1.8,maven,idea
2、实现过程
1、idea的配置
1、在idea中的setting做下面配置(勾选红框中的选择框)
2、 ctrl + shift + alt + / 这组快捷键后会有一个小弹窗,点击Registry 就会进入下面的界面,找到下面的配置项并勾选,勾选后直接点close
2、 添加依赖
<!-- 配置热部署的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 操作json的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.36</version>
</dependency>
完整的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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.21.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.srpingboot</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>test</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</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>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.36</version>
</dependency>
<!---->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 有的文章说这里要加上下面的代码,经过测试,不加也能实现热部署 -->
<!--<configuration>
<fork>true</fork>
</configuration>-->
</plugin>
</plugins>
</build>
</project>
3、添加配置
完整的application.properties
#关闭缓存,即使刷新
#spring.freemarker.cache=false
spring.thymeleaf.cache=true
#热部署生效
spring.devtools.restart.enabled=true
#设置重启的目录,添加那个目录的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
#为mybatis设置,生产环境下可删除
#restart.include.mapper=/mapper-[\\w-\\.]+jar
#restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
#排除哪个目录的文件不需要restart
#spring.devtools.restart.exclude=static/**,public/**
#classpath目录下的web-inf 文件夹内容修改不重启
#spring.devtools.restart.exclude=WEB-INF/**
# 解决项目自动重新编译后接口报404的问题
spring.devtools.restart.poll-interval=3000
spring.devtools.restart.quiet-period=1000
4、测试
添加测试类test.java
package com.srpingboot.test.test;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author:fengling
* @Description:
* @Param
* @Date:2019-05-17 09:11
*/
@RestController
@RequestMapping("/test")
public class Test {
@GetMapping( "/1")
public JSONObject sendData(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","xiaobai");
jsonObject.put("age",16);
System.out.println("123");
return jsonObject;
}
}
说明:在浏览器中输入localhost:8080/test/1就可以进行测试(配置了server.port 要把8080改成server.port的值),当你修改的Java类失去焦点的时候,就可以在控制台看到项目自动重新编译(可能要3秒左右,这个在配置中有设置,至于为甚么要设置这个时间下面有解释)
3、踩坑记录
1、关于idea的配置
在网上看到有些文章说要做下面的配置,其实不用配置也行,用默认的do nothing只要配置一开始的两个地方就可以,另外这个配置在run -> editconfigration 里
2、springboot版本的误解
springboot 版本在 1.5.3 后好像都支持devtools
3、在配置了热部署后有些接口会报404(有时会报,有时不会)
这不是接口代码的问题 ,这个要做一些配置。在application.properties 中添加下面代码,上面的配置文件中也有(后面的单位根据springboot版本需求天添加,报红了就把单位去掉)。
spring.devtools.restart.poll-interval=3000ms
spring.devtools.restart.quiet-period=2999ms