spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

使用需要添加以下的配置:

<dependencies><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>

说明:

(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),
实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的
(2)配置了后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

devtools的配置

在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。
在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持,配置内容:

#热部署生效
spring.devtools.restart.enabled: true
#设置重启的目录
#spring.devtools.restart.additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启 spring.devtools.restart.exclude: WEB-INF/**

IDEA配置

当我们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译:

(1)File-Settings-Compiler-Build Project automatically

(2)ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

测试

  • 修改类–>保存:应用会重启
  • 修改配置文件–>保存:应用会重启
  • 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)

springboot 热部署 idea版本(转)相关推荐

  1. idea中配置Springboot热部署

    idea中配置Springboot热部署 1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency>< ...

  2. 常用注解[spring 的 java 配置] ||springboot 热部署

    常用注解[spring 的 java 配置] 回顾学过的 spring 的注解 @Controller @RestController @Service @Repository @Component ...

  3. SpringBoot 热部署

    SpringBoot 热部署 最近在讲springcloud微服务,中间使用到springboot开发代码时,经常因为一点小的改动就需要重启,虽然重启也很快.于是就开始折腾热部署,下面记录如下: 一. ...

  4. SpringBoot热部署加持

    概述 进行SpringBoot的Web开发过程中,我们很多时候经常需要重启Web服务器才能保证修改的 源代码文件.或者一些诸如xml的配置文件.以及一些静态文件生效,这样耗时又低效.所谓的热部署指的是 ...

  5. 超详细springboot热部署

    超详细springboot热部署 ①修改依赖 <!--热部署--> <dependency><groupId>org.springframework.boot< ...

  6. SpringBoot热部署环境搭建和原理分析

    SpringBoot热部署环境搭建 插件会监控 classpath的资源变化 对类加载采用了两种类加载器(只重启开发人员编写的代码部分) 一. 现象 开发项目过程中,修改了某些代码后需要本地验证时,需 ...

  7. Springboot 热部署----热部署插件的使用

    热部署有什么用?什么是热部署? 在实际开发中,我们修改某些代码逻辑功能或页面后都需要重启应用,这无形中降低了开发效率.因此,热部署出来了. 热部署就是指当我们修改代码后,服务能自动重启加载新修改的内容 ...

  8. SpringBoot热部署--bunny0728

    bunny0728–SpringBoot热部署 第一步: <!--热部署配置--> <dependency> <groupId>org.springframewor ...

  9. springboot热部署该怎么实现?springboot热部署实现方式

    Spring家族博大精深,我之前讲过该如何搭建一个简单的springboot项目,这次我们就来深入探讨一下springboot,比如,你们知道springboot该如何搭建热部署吗?下面就来为大家讲解 ...

最新文章

  1. 小程序作用域与模块化
  2. 殊途同归? 亚马逊和微软都选了云业务老大当公司CEO
  3. python 不显示前几个字符_「Python 秘籍」删除字符串中不需要的字符
  4. C语言 pthread_cancelpthread_detach
  5. python如何输出结果为16_python 以16进制打印输出的方法
  6. django基础知识总结
  7. php redis入门指南,redis入门指南(四)—— redis如何节省空间
  8. vue 项目npm install奇怪错误处理办法(一)
  9. JAVA随机生成中文姓名,性别,Email,手机号,住址
  10. 【PHP8入门指南】基础语法与变量
  11. Unity 3D课程总结
  12. 清除office激活秘钥方法
  13. M1芯片安装CleanMyMac X4.7.4的方法(附下载)M1芯片安装那个CleanMyMac X版本?CleanMyMac X已完美支持M1芯片安装 支持big sur系统
  14. Linux电驴客户端,全面介绍Linux安装电驴
  15. C++——TCP和UDP头部结构(下)
  16. 【Python3笔记】五、Python 字符串
  17. 33岁跳槽无路,濒临绝望之际受贵人指点,成功上岸阿里(Java岗)
  18. 如何在线打开Xmind文件 — 百度脑图在线工具
  19. HTML如何返回上一页?
  20. android 仿美团、大众点评滑动viewpager菜单栏

热门文章

  1. 优质机器学习方面文章
  2. NeurIPS2019:新人与Bengio等大佬面对面交流,还颁发三项论文奖
  3. 过去半年,二手楼市里的真实与残酷
  4. 干货丨卷积神经网络工作原理的直观解释
  5. 干货丨从感知机到深度神经网络,带你入坑深度学习
  6. 现场丨2017中国计算机大会(CNCC2017)之李飞飞演讲:ImageNet之后,计算机视觉何去何从?
  7. Tensorflow—CNN应用于MNIST数据集分类
  8. invalid use of incomplete type ‘class B‘
  9. 寒武纪开盘暴涨350%,市值突破1000亿,85后创始人身家超300亿!千亿盛宴背后隐忧不可忽视!...
  10. 协作机器人与传统机器人有何区别?