SpringBoot(六):springboot热部署
在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热部署的更多相关文章
- SpringBoot项目设置热部署
记录一个SpringBoot 设置热部署(修改项目之后,项目自动重启)实例 POM.XML 文件 <!-- 配置springBoot项目的热部署启动 --> <dependency& ...
- (40). springboot + devtools(热部署)【从零开始学Spring Boot】
我们之前在在()Spring Boot热部署[从零开始学Spring Boot] (http://412887952-qq-com.iteye.com/blog/2291518 )讲过通过使用spri ...
- 玩转 Springboot 2 之热部署(DevTools)
Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序.在IDE中工作时,这可能是一 ...
- springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- springboot配置idea 热部署
背景: 在开发中,当我们修改代码之后,每次都要重新启动,很是浪费时间,在springboot中就有一种热部署方式,可以实现想要修改不需要每次都重新启动,保存即可生效 用法: 一.maven 添加 ...
- 在SpringBoot中使用热部署(DevTools)
一.简介 有时候我们开发完SpringBoot项目后,启动运行.但是经常发现代码需要反复修改,然后修改部分内容后需要再启动....这样太费时了,热部署就是用来解决这一问题.让你修改完代码后,能自动执行 ...
- SpringBoot入门篇--热部署
在项目的开发过程中我们难免会涉及到对代码的修改,有bug我们也需要对代码进行修改,这时候我们就需要重启服务器.但是,我们知道的是这个过程是相当的痛苦的,重启服务器涉及到了所有资源的重新加载,过程那是相 ...
- SpringBoot(十一)_springboot热部署
在开发中,后台修改了代码就要重新启动服务,很是费劲,现在我们可以让SpringBoot自动编译 热启动就需要用到我们在一开始引入的另外一个组件:devtools.它是 Spring Boot 提供的一 ...
- 第十七章 springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- 基于Maven的SpringBoot项目实现热部署的两种方式
转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...
随机推荐
- js正则《转载收藏》
\:转义字符.'\\n'匹配\n ^:开始位置.'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88' $:结束位置.'[0-9]$'匹配以数字结尾的字符,可以匹配'ab12 ...
- 在oracle中,group by后将字符拼接,以及自定义排序
1.在oracle中,group by后将字符拼接.任务:在学生表中,有studentid和subject两个字段.要求对studentid进行group by分组,并将所选科目拼接在一起.oracl ...
- 笔记:I/O流-字符集
Java 库的 java.nio 包用 Charset 类统一了对字符集的转换,支付姐建立了两个字节Unicode码元序列与使用本地字符编码方式的字节序列之间的映射,Charset类使用的时由IANA ...
- 笔记:JDBC 数据库
数据库 URL 在连接数据库时,我们必须使用各种与数据库类型相关的参数,例如主机名.端口号和数据库名称等,JDBC使用了一种与普通URL相类似的语法来描述数据库,JDBC URL 一般语法为: jdb ...
- 【Python】 http客户端库requests & urllib2 以及ip地址处理IPy
requests requests是个HTTPClient库,相比于urllib,urllib2等模块比更加简洁易用 ■ get请求 作为示例,讲一下关于requests如何发起并处理一个get请求 ...
- ngix_http_stub_status_module
1.ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的,所以在编译 Ngin ...
- SQL注入之Sqli-labs系列第三篇
废话不在多说 let's go! 继续挑战第三关(Error Based- String) 1.访问地址,加入参数后 and 1=1和and 1=2进行测试,木有任何动静 2.再使用 ' 出现报 ...
- 关于css的text-indent首行缩进两个字符和图片缩进的问题
段落前面空两个字的距离,不要再使用空格了.应该使用首行缩进text-indent. text-indent可以使得容器内首行缩进一定单位.比如中文段落一般每段前空两个汉字. <style typ ...
- 走进webpack(3)-- 小结
写这一系列的文章,本意是想要梳理一下自己凌乱的webpack知识,只是使用过vue-cli,修改过其中的一部分代码,但是对于一个简单项目从0开始搭建webpack的流程和其中的依赖并不是十分清楚.所以 ...
- 【Java EE】从零开始写项目【总结】
从零开发项目概述 最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等... 被虐得不要不要的,即使是非常简单有时 ...