在j2ee项目开发中,热部署插件是JRebel。JRebel的使用为开发人员带来了极大的帮助,且挺高了开发便捷。而在SpringBoot开发生态环境中,SpringBoot热部署常用插件是:spring-boot-devtools。下边将会学习devtools的用法。

注意:springboot不只支持devtools热部署插件,还支持springloaded方式。

如何使用spring-boot-devtools?

需要在springboot的pom.xml中引入:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

如何验证spring-boot-devtools起效?

当启动springboot工程后,继续修改代码,在不重新手动启动springboot工程的情况下,编译修改的代码,验证是否起效。

1)在springboot工程中,新建一个HelloWordController.java控制类,在控制类中打印“hello-word”

2)运行springboot入口方法,来启动springboot工程,并在浏览器中浏览地址http://localhost:8080/index,查看打印信息。

SpringBoot入口函数类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan; @ComponentScan("com.dx.controller")
@EnableAutoConfiguration
public class ApplicationStarter {
public static void main(String[] args) {
SpringApplication.run(ApplicationStarter.class, args);
}
}

运行main函数,成功启动了springboot工程,之后浏览器访问http://localhost:8080后,控制台打印了“hello word”信息。

3)修改HelloWordController.java:把打印内容修改为“hello-springboot”,并编译“”该控制类,在浏览器中(不重启springboot服务器的情况下)访问http://localhost:8080/index,查看控制台打印信息。此时发现打印信息依然是“hello word”,并未自动编译。

4)在工程pom.xml追加“spring-boot-devtools”依赖,并把HelloWordController.java打印信息修改回为“hello word”,在浏览器中访问http://localhost:8080/index,此时控制台打印信息为“hello word”。

5)修改HelloWordController.java:把打印内容修改为“hello-springboot”,并编译“”该控制类,在浏览器中(不重启springboot服务器的情况下)访问http://localhost:8080/index,查看控制台打印信息。此时发现打印信息依然是“hello springboot”,这就说明热部署已经起效。

spring-boot-devtools原理:

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

注意:这里边如果是类发生了变化,是发生了较快的重启,而不是不重启springboot服务。

spring-boot-devtools参数配置:

1)排除资源与包括资源:

在applicaiton.properties中添加配置:

spring.devtools.restart.exclude=static/**,templates/**
spring.devtools.restart.additional-exclude=public/** (处理默认配置排除之外的)
spring.devtools.restart.enabled=false (禁止自动重启)

2)可以使用trigger.file的重启策略:

在applicaiton.properties中添加配置:

spring.devtools.restart.triggerFile=trigger.file

注意:这个文件不要放到default_excludes目录下,一般情况下放到resources文件下。

IDEA配置实现Ctrl+S保存后自动编译:

Eclipse默认自动编译,而idea默认手动编译,因此idea需要修改两个参数以达到任意时间自动编译的目的。

1)IDEA下File-Settings-Compiler-Build Project automatically(注意后面only works not running/debugging,所以要实现热部署就必须打破这个限制,于是乎有了下面设置)

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

测试

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

SpringBoot(六):springboot热部署的更多相关文章

  1. SpringBoot项目设置热部署

    记录一个SpringBoot 设置热部署(修改项目之后,项目自动重启)实例 POM.XML 文件 <!-- 配置springBoot项目的热部署启动 --> <dependency& ...

  2. (40). springboot + devtools(热部署)【从零开始学Spring Boot】

    我们之前在在()Spring Boot热部署[从零开始学Spring Boot] (http://412887952-qq-com.iteye.com/blog/2291518 )讲过通过使用spri ...

  3. 玩转 Springboot 2 之热部署(DevTools)

    Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序.在IDE中工作时,这可能是一 ...

  4. springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  5. springboot配置idea 热部署

    背景: 在开发中,当我们修改代码之后,每次都要重新启动,很是浪费时间,在springboot中就有一种热部署方式,可以实现想要修改不需要每次都重新启动,保存即可生效 用法: 一.maven 添加   ...

  6. 在SpringBoot中使用热部署(DevTools)

    一.简介 有时候我们开发完SpringBoot项目后,启动运行.但是经常发现代码需要反复修改,然后修改部分内容后需要再启动....这样太费时了,热部署就是用来解决这一问题.让你修改完代码后,能自动执行 ...

  7. SpringBoot入门篇--热部署

    在项目的开发过程中我们难免会涉及到对代码的修改,有bug我们也需要对代码进行修改,这时候我们就需要重启服务器.但是,我们知道的是这个过程是相当的痛苦的,重启服务器涉及到了所有资源的重新加载,过程那是相 ...

  8. SpringBoot(十一)_springboot热部署

    在开发中,后台修改了代码就要重新启动服务,很是费劲,现在我们可以让SpringBoot自动编译 热启动就需要用到我们在一开始引入的另外一个组件:devtools.它是 Spring Boot 提供的一 ...

  9. 第十七章 springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  10. 基于Maven的SpringBoot项目实现热部署的两种方式

    转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...

随机推荐

  1. Java安装和环境变量配置

    一.Java的安装 1.下载合适的版本,安装jdk和jre到同一路径下的同一文件夹下,例如:都安装在 E:\Java: 备注:  JDK:Java Development Kit :  JRE: Ja ...

  2. intellij IDEA配置Tomcat

    第一步:点击上方File选项找到Setting,在文本框中输入Tomcat,找到之后点击右下角的OK 第二步:再次找到Setting,在文本框中输入Application Servers找到后,单击 ...

  3. Redis相关命令

    一.命令示例 1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX: #在Shell命令行下启动Redis客户端工具. /> redis-cli #清空当前选择的数据库 ...

  4. java并发编程基础 --- 7章节 java中的13个原子操作类

    当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量 i=1,A线程更新 i+1,B线程也更新 I+1,经过两个线程的操作之后可能 I不等于3,而是等于2.因为A和B线程更 ...

  5. [bzoj1026][SCOI2009]windy数_数位dp

    windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...

  6. 每天学习点js

    ---- 有人会说js很简单,很容易学,但是要想把这门语言用活,用精通还是需要下很大的功夫的.那么我们就来看看接下来这几道js面试题吧. 题1 if(!(a in window)){ ; } cons ...

  7. Android 优化APP 构建速度的17条建议

    转载:http://www.jianshu.com/p/a1cc8f2e0877 较长的构建时间将会减缓项目的开发进度,特别是对于大型的项目,app的构建时间长则十几分钟,短则几分钟,长的构建时间已经 ...

  8. js面向对象的理解

    ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScrip ...

  9. layui-row 布局因高度不一致错位问题

    js框架为vue,通过vue去循环生成layui-col-md2;<div class="layui-row layui-col-space1"> <templa ...

  10. java1.8版本的HashMap源码剖析

    一.摘要 以下分析内容均是基于JDK1.8产生的,同时也和JDK1.7版本的hashmap做了一些比较.在1.7版本中,HashMap的实现是基于数组+链表的形式,而在1.8版本中则引入了红黑树,但其 ...