Spring-Boot-Devtools使用

简介: Spring-Boot-Devtools在IDEA下使用示例

一、简介

开发热部署,更新文件后,不需要重启即可见到效果。

二、使用

说明:此处开发工具为idea,springboot版本为2.2.2.RELEASE。搭建一个简单的web项目进行测试。

package com.tab343.devtools.devtools.controller;


import org.springframework.stereotype.Controller;

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

import org.springframework.web.bind.annotation.ResponseBody;


import java.util.HashMap;

import java.util.Map;


//Controller示例代码,我们通过更改v2为v3,然后刷新页面测试效果

@Controller

public class MyController {


   @GetMapping("/hello")

   @ResponseBody

   public Map<String,String> hello(){

       return new HashMap<String, String>(){{

           put("k1","v1");

           put("k2","v2");

       }};

   }


}


1.添加依赖

Maven

<dependencies>

   <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-devtools</artifactId>

          <!--可选的,设置为true,打包时不会进入项目-->

          <optional>true</optional>

   </dependency>

</dependencies>

Gradle

dependencies {

         compile("org.springframework.boot:spring-boot-devtools")

}

2.配置开发工具

参考:SpringBoot2.X (十二):使用 devtools 热部署

(1)File ——> Settings ——> Complier ——> 选中 Build project automatically

(2)Shift+ALT+Ctrl+/ ---->选择 Registry---->勾选 "complier.automake.allow.when.app.running"

3.效果

修改MyController中map的v2为v3,保存后刷新页面。结果为{"k1":"v1","k2":"v3"}

可能马上刷新页面值还是未改变,因为类加载器还未重新加载MyController,所以内存中还是v2。这里此插件的工作机制有关,说明见如下引用。使用ctrl+f9(Build->Build Project)重新编译项目后,再次刷新,即可看到效果。

默认情况下,当devtools检测到classpath下有文件内容变更时,它会对当前Spring Boot应用进行重新启动。但它的重新启动并不是完整的重启整个应用。它的应用的重启是基于两个不同的ClassLoader进行的,根ClassLoader负责加载第三方jar包中的内容,而当前应用中的Class、配置文件等资源则使用一个可重新加载的ClassLoader进行加载,叫RestartClassLoader

springboot官网说明-20.2 Automatic Restart

Triggering a restart

As DevTools monitors classpath resources, the only way to trigger a restart is to update the classpath. The way in which you cause the classpath to be updated depends on the IDE that you are using. In Eclipse, saving a modified file causes the classpath to be updated and triggers a restart. In IntelliJ IDEA, building the project (Build -> Build Project) has the same effect.

4.一些配置


application.properties配置

说明

spring.devtools.restart.enabled=true

是否开启插件功能。

当值为false时,idea在debug模式下,ctrl+f9重新编译还是会热部署

spring.devtools.restart.log-condition-evaluation-delta=true

更改文件后控制台是否显示更改日志

spring.devtools.restart.exclude=static/**,public/**

不需要热加载的文件

idea在debug模式下重新编译还是会热部署




目录
相关文章
|
6月前
|
XML 安全 Java
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
6月前
|
Java 数据安全/隐私保护
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
337 1
|
2月前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
46 2
|
3月前
|
缓存 Java Spring
Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决
Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决
|
6月前
|
JavaScript Java 测试技术
返家乡”高校暑期社会实践微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
返家乡”高校暑期社会实践微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
38 0
|
6月前
|
Java API 时序数据库
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
165 0
|
JSON 前端开发 Java
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
425 0
|
弹性计算 Kubernetes 负载均衡
云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务
云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务
329 0
|
弹性计算 Kubernetes Cloud Native
云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩
云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩
243 0