spring-boot 速成(2) devtools之热部署及LiveReload
JRebel热部署插件相信很多人都知道,但是这是一款商业插件,spring-boot框架也提供了类似的功能,即:devtools,关键是免费的! 使用方法如下:
一、添加 devtools依赖
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-devtools')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
只要添加org.springframework.boot:spring-boot-devtools 依赖项即可。
二、idea中启用项目自动构建
三、idea中compiler.automake.allow.when.app.running 属性更改为true
这个选项很隐蔽,特别是在mac上,正确的寻宝姿势如下(一般人我不告诉他):
3.1 Keymap -> Other -> Maintenance
记下这个快捷键: shift + option + command + /
3.2 回到idea主窗口,按下这4个神奇的组合键
3.3 再找到compiler.automake.allow.when.app.running 选项,将它打开
然后关掉,大工告成。现在只要代码一修改,然后保存,就会实时触发编译,并重新加载,实现了不重启的热部署,开发调试时十分方便。
但是,如果每个java源代码,随便改点东西,就频繁自动编译、重新加载,开销也比较大,也可以参考下面的设置:
server:
port: 9090 #服务器端口
context-path: "/jimmy" #context-path
spring:
main:
banner-mode: "off"
devtools:
restart:
trigger-file: .trigger
注意最后的trigger-file: .trigger,这表示只有resources/META-INF/.trigger的内容变化时,才会触发重新编译及加载
另外,一些静态资源,比如图片,css样式,js脚本文件,如果内容修改了,也有可能触发自动重启,默认情况下META-INF/resources、resources、static、public、templates等几个目录的内容已经被devtools排除在外了(即:这些目录下的文件变化,不会触发自动重启),具体可以查看spring-boot的源码:org.springframework.boot.devtools.autoconfigure.DevToolsProperties.Restart#DEFAULT_RESTART_EXCLUDES
如果你的静态资源不在几个标准目录里(比如webresource),就必须手动排除了,类似这样:
spring:
main:
banner-mode: "off"
devtools:
restart:
trigger-file: .trigger
exclude: /webresouce/**
关于LiveReload
spring-boot-devtools提供的另一项特别有用的功能就是LiveReload,常规web开发中,如果修改了css/javascript/html等前端内容,至少得刷新下页面,才能看到最新效果,而LiveReload则可以让开发人员,在任何编辑器中,只要修改了源代码(比如:将某个标题设置成红色),网页就实时做出相应的响应(即:字变红),不需要刷新。
秘密就在于spring-boot-devtools在应用启动时,自带了一个LiveReload Service,参考下面的截图:
那么,浏览器怎么做到实时与LiveReload的Service保持实时内容同步呢?当然,要安装插件,chrome的应用商店里搜索LiveReload免费插件安装即可(需要反抢,你懂的),在调试时,只要激活该插件,页面就会与LiveReload建立websocket的长链接,参考下图:
同时,如果查看本机建立的livereload端口连接情况,也可以印证这一点:
不过要注意的是,spring-boot项目重启时,偶尔发现浏览器与liveReload的连接不会及时关闭,导致端口被占用,最终项目重启失败,另外,如果idea同时启动多个webapplication,只有第1个启动的应用会有LiveReload Server,后面的应用livereload不管用(这也很容易理解,如果1台机器上有多个livereload server,浏览器的livereload 插件,估计也不太好判断该连哪个web socket)
参考文章:
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-devtools
spring-boot 速成(2) devtools之热部署及LiveReload的更多相关文章
- spring boot+ Intellj idea devtools 设置热部署
POM文件 <!--添加依赖--> <dependency> <groupId>org.springframework.boot</groupId> & ...
- spring boot (三): 热部署
介绍了Spring boot实现热部署的两种方式,这两种方法分别是使用 Spring Loaded和使用spring-boot-devtools进行热部署. 热部署是什么 大家都知道在项目开发过程中, ...
- spring boot 启动报错(spring-boot-devtools热部署后):The elements [spring.resources.cache-period] were left unbound. Update your application's configuration
详细错误代码: *************************** APPLICATION FAILED TO START *************************** Descript ...
- Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools)
热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各 ...
- Spring Boot 要点--启动类和热部署
spring boot需要一个启动类 比如 package com.tianmaying; import org.springframework.boot.SpringApplication; imp ...
- 使用eclipse,对spring boot 进行springloader或者devtool热部署失败处理方法
确定配置进行依赖和配置没有错误后. 调整spring boot 的版本,因为新版本对老版本的spring boot 不能使用. 改为: <groupId>org.springframewo ...
- Spring boot 解析jsp支持jsp热部署
解析jsp并且支持jsp热部署 参考地址:https://www.wanpishe.top/detail?blogId=39875536-7d45-48ec-a7b5-f36b85c3a235
- Spring Boot学习笔记(三)实现热部署
pom文件中添加如下依赖即可 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- spring boot 在idea中实现热部署
1)在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
随机推荐
- mysql知识汇总
一.数据类型介绍 数据类型 字节长度 范围或用法 bigint 8 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] binary(M) M 类似Char的二进制存储,只包含byte ...
- Docker入门简记
Docker的容器环境实际上是借助类Linux命名空间,将各种系统资源按照容器不同划分了不同的命名空间进行隔离,为各个进程提供独立的运行环境关键概念:容器,镜像两个概念一起看,镜像好比平常系统中的各个 ...
- Java多线程:多线程基础知识
一.线程安全性 定义:多个线程之间的操作无论采用何种执行时序或交替方式,都要保证不变性条件不被破坏 “共享”:变量可以由多个线程同时访问: “可变”:变量的值在其生命周期内可以发生改变 ...
- awd入门教程
(转自:awk入门教程 - 阮一峰) 以下为正文 ———————————————————— awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序. 它依次处理文件的每一行,并读 ...
- Linux 开机启动顺序_005
***了解Linux开机启动顺序之前先了解一下Linux运行级别,通过inittab配置文件查看运行级别的定义: [root@oldboy ~]# cat /etc/inittab # Default ...
- 在windows 上自动重启 tomcat 的方法
在windows 上自动重启 tomcat 的方法 实现思路: Windows 上监控tomcat 进程并且自动重启的脚本 一类是 定时重启 tomcat 一类是 监控并重启 写一个守护tomcat进 ...
- MySQL优化之——备份和恢复
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46766919 备份 逻辑备份方法 使用MYSQLDUMP命令备份 MYSQLDUM ...
- K8s(7)-安装Web UI
仪表板是基于Web的Kubernetes用户界面.您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源.您可以使用仪表板来概述群集上运行的应用 ...
- k8s(5)-拓展服务
在之前我们创建了一个部署,然后通过服务公开它.部署只创建了一个Pod来运行我们的应用程序.当流量增加时,我们需要扩展应用程序以满足用户需求. 通过更改部署中的副本数来完成扩展. 1. 拓展部署 这里将 ...
- VS2015编译rtklib2.4.2
准备工作 在VS2015下新建一个win32的dll项目(空项目) 把在github上下载的rtklib2.4.2里的src文件夹复制到刚刚建立的win32下 把src里的文件添加到项目里,其中头文件 ...