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

这个问题的参考文章:https://segmentfault.com/q/1010000013018769

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值