Spring Boot 1.3引入了一组新的开发者工具,可以让你在开发时更方便地使用Spring Boot,包括如下功能。

  • 自动重启:当Classpath里的文件发生变化时,自动重启运行中的应用程序。
  • LiveReload支持:对资源的修改自动触发浏览器刷新。
  • 远程开发:远程部署时支持自动重启和LiveReload
  • 默认的开发时属性值:为一些属性提供有意义的默认开发时属性值。

Spring Boot的开发者工具采取了库的形式,可以作为依赖加入项目。如果你使用Gradle来构建项目,可以像下面这样在build.gradle文件里添加开发工具:

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

在Maven POM里添加<dependency>是这样的:

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

当应用程序以完整打包好的JAR或WAR文件形式运行时,开发者工具会被禁用,所以没有必要在构建生产部署包前移除这个依赖。

一、自动重启

在激活了开发者工具后,Classpath里对文件做任何修改都会触发应用程序重启。为了让重启速度够快,不会修改的类(比如第三方JAR文件里的类)都加载到了基础类加载器里,而应用程序的代码则会加载到一个单独的重启类加载器里。检测到变更时,只有重启类加载器重启。

有些Classpath里的资源变更后不需要重启应用程序。像Thymeleaf这样的视图模板可以直接编辑,不用重启应用程序。在/static或/public里的静态资源也不用重启应用程序,所以Spring Boot 开发者工具会在重启时排除掉如下目录:/META-INF/resources/resources/static/public和 /templates

可以设置spring.devtools.restart.exclude属性来覆盖默认的重启排除目录。例如,你只排除/static/templates目录,可以像这样设置spring.devtools.restart. exclude

spring: devtools: restart: exclude: /static/**,/templates/**

另一方面,如果想彻底关闭自动重启,可以将spring.devtools.restart.enabled设置为false:

spring: devtools: restart: enabled: false

另外,还可以设置一个触发文件,必须修改这个文件才能触发重启。例如,在修改为.trigger 的文件前你都不希望执行重启,那么你只需像这样设置spring.devtools.restart.trigger-file属性:

spring: devtools: restart: trigger-file: .trigger

如果你的IDE会连续编译修改的文件,那触发文件还是很有用的。没有触发文件的话,每次变更都会触发重启。有触发文件,就能保证只有你想重启时才会发生重启(修改触发文件即可)。

二、LiveReload

在Web应用程序开发过程中,最常见的步骤大致如下:

  • 修改要呈现的内容(比如图片、样式表、模板)。
  • 点击浏览器里的刷新按钮,查看修改的结果。
  • 回到第1步。

虽然这并不难,但如果能不点刷新就直接看到修改结果,那岂不是更好?

Spring Boot的开发者工具集成了LiveReload(http://livereload.com),可以消除刷新的步骤。激活开发者工具后,Spring Boot会启动一个内嵌的LiveReload服务器,在资源文件变化时会触发浏览器刷新。你要做的就是在浏览器里安装LiveReload插件。

如果想要禁用内嵌的 LiveReload 服务器,可以将 spring.devtools.livereload. enabled设置为false:

spring: devtools: livereload: enabled: false

三、远程开发

在远程运行应用程序时(比如部署到服务器上或云上),开发者工具的自动重启和LiveReload特性都是可选的。此外,Spring Boot开发者工具还能远程调试Spring Boot应用程序。

在传统的开发过程中,你不会打开远程开发功能,因为这会影响性能。但在一些特殊的场景中,此类工具就很有用。比如,出于开发目的,所开发的应用程序部署在非生产环境里。如果应用程序不是在本地开发环境里,而是在云端部署,则尤其如此。

你必须设置一个远程安全码来开启远程开发功能:

spring: devtools: remote: secret: myappsecret

有了这个属性后,运行中的应用程序就会启动一个服务器组件以支持远程开发。它会监听接受变更的请求,可以重启应用程序或者触发浏览器刷新。

为了使用这个远程服务器,你需要在本地运行远程开发工具的客户端。这个远程客户端是一个类,全限定类名是org.springframework.boot.devtools.RemoteSpringApplication。它会运行在IDE里,要求提供一个参数,告知远程应用程序部署在哪里。

例如,假设你正远程运行阅读列表应用程序,部署在 Cloud Foundry 上,地址是 https://readinglist.cfapps.io。如果你正在使用Eclipse或Spring ToolSuite,可以通过如下步骤开启远程客户端。

  1. 选择Run > Run Configurations菜单项。
  2. 创建一个新的Java Application运行配置。
  3. 在Project里选中Reading List项目(可以键入项目名或者点击Browse按钮找到这个项目,见图A-1)。
  4. 在Main Class里键入org.springframework.boot.devtools.RemoteSpringAppli-cation(见图A-1)。
  5. 切换到Arguments标签页,在Program Arguments里键入https://readinglist.cfapps. io(见图A-2)。

客户端启动后,就可以在IDE里修改应用程序了。在检测到变动后,这些修改点会被推送到远端并加以应用。如果修改的内容涉及呈现的Web资源(比如样式表或JavaScript),LiveReload 还会触发浏览器刷新。

远程客户端还会开启基于HTTP的远程调试通道,这样就能在IDE里调试部署在远程的应用程序了。你要做的就是确保远程应用程序打开了远程调试功能。这通常可以通过配置JAVA_OPTS来实现。

比方说,你的应用程序部署在Cloud Foundry上,可以像下面这样在应用程序的manifest.yml里设置JAVA_OPTS。

---env: JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"

远程应用程序启动后,会和本地调试服务器建立一个连接。你可以设置断点,一步步执行远程应用程序里的代码,就好像它们运行在本地一样(出于网络原因,速度会有点慢)。

四、默认的开发时属性

有些配置属性通常在开发时设置,从来不用在生产环境里。比如视图模板缓存,在开发时最好关掉,这样你可以立刻看到修改的结果。但在生产环境里,为了追求更好的性能,应该开启视图模版缓存。

默认情况下,Spring Boot会为其支持的各种视图模板(ThymeleafFreemarkerVelocityMustacheGroovy模板)开启缓存选项。但如果存在Spring Boot的开发者工具,这些缓存就会禁用。

实际上,这就是说在开发者工具激活后,如下属性会设置为false:

  • spring.thymeleaf.cache
  • spring.freemarker.cache
  • spring.velocity.cache
  • spring.mustache.cache
  • spring.groovy.template.cache

这样一来,就不用在开发时(在一个开发时使用的Profile配置里)禁用它们了。

五、全局配置开发者工具

你应该已经注意到了,在使用开发者工具时,你通常会在多个项目里使用相同的设置。举个例子,如果你使用了重启触发文件,那么你很可能在多个项目里都使用相同的触发文件名。相比在每个项目里重复开发者工具配置,对开发者工具做全局配置显得更方便一些。

要实现这个目的,可以在你的主目录(home directory)里创建一个名为.spring-boot-devtools. properties的文件。(请注意,文件名用“.”开头。)在那个文件里,你可以设置希望在多个项目里共享的各种开发者工具属性。

例如,假设你想把触发文件的名称设置为.trigger,在所有Spring Boot项目里禁用LiveReload。你可以创建一个.spring-boot-devtools.properties文件,包含如下内容:

spring.devtools.restart.trigger-file=.trigger
spring.devtools.livereload.enabled=false

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

需要面试题以及项目大纲的朋友点赞+收藏后,点击这里免费获取!诚意满满!!

Java面试精选题、架构实战文档:传送门

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)获取!诚意满满!!**

Java面试精选题、架构实战文档:传送门

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

Spring-Boot开发者工具:自动重启、LiveReload、远程开发、默认的开发时属性值相关推荐

  1. 使用Spring Boot开发者工具进行自动重启和页面自动刷新

    简介 大家可能都听说过开发Node.js应用时可以使用多种工具对开发者提供便利,如WebPack提供了开发者服务器来支持js应用动态更替,并在保存文件时自动刷新浏览器.Spring Boot也提供了相 ...

  2. Spring Security 实战:Spring Boot 下的自动配置

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 我们在前几篇 ...

  3. spring boot rest接口自动生成文档(包含swagger)--gradle 下的配置

    之前写过一篇文章:spring boot rest接口自动生成文档(包含swagger),这个使用的是maven作为依赖管理工具,现在,让我们体验一下gradle在spring boot项目中如何配置 ...

  4. spring boot rest接口自动生成文档(包含swagger)

    spring boot rest接口自动生成文档(包含swagger)      写接口免不了写接口文档,但是当文档与代码分开独立演进的时候,会发生很多不同步的问题.         接口描述与代码同 ...

  5. Spring Boot 接口参数自动加解密

    本文标题:Spring Boot 接口参数自动加解密 原始链接: https://www.shuibo.cn/102.html 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链 ...

  6. Spring Boot 灵活实现自动配置背后的故事~用起来更香了

    最近一直忙着在做新应届生的员工技术培训和面试 ,培训的则是Spring Boot部分的内容,这部分也是面试常问的点,于是想到了各位读者大大,特地的把内容分享大家一份. 不知道大家第一次搭Spring ...

  7. 微信开发者工具集成git,实现多人协调开发,例如GitHub

    微信开发者工具集成git,实现多人协调开发,下面就拿GitHub举例,一一说明. 一.在GitHub创建远程仓库.这里忽略,网上很多. 二.在微信开发者工具中配置Git,并实现文件上传. 1.点击开发 ...

  8. Spring Boot + IntelliJ IDEA——自动部署[Spring Boot热部署]+LiveReload[前端自动刷新、热加载]解决方案

    基本概念 spring-boot-devtools: Spring Boot包括一组额外的工具,这些工具可以使应用程序开发体验更加愉快.该spring-boot-devtools模块可以包含在任何项目 ...

  9. (附源码)spring boot高校机房自动排课系统 毕业设计 211004

    高校机房自动排课系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用J ...

  10. spring boot高校机房自动排课系统毕业设计源码211004

    高校机房自动排课系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用J ...

最新文章

  1. Microsoft Dynamics Marketplace
  2. 二十三种设计模式-六大原则
  3. mysql ansi quotes_mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)
  4. 在浏览的地址栏中,直接调用js「javascript:alert(hello wrold);」。
  5. 剑指offer面试题15. 二进制中1的个数(位运算)
  6. 拓端tecdat|R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
  7. linux 打开cgm软件,cgm文件扩展名,cgm文件怎么打开?
  8. 使用Gitee和Sourcetree进行Keil版本控制
  9. JAVA项目面试总结 电商系统 OA办公系统 P2P网贷
  10. matlab云模型建模,【数模matlab】数据建模:云模型
  11. 学习AngularJs:Directive指令用法
  12. numpy中如何判断一个值是否为masked
  13. 理解MMORPG、回合制、ARPG、SLG、Roguelike、卡牌、竞技类
  14. 教师直播平台对比分析
  15. 集线器 交换机 路由器关系
  16. oracle 查看回收站空间,ORACLE 回收站当前状态查询整理
  17. 企业WiFi解决方案 安全上网很重要
  18. 美国访问学者签证材料清单
  19. JDK JRE JVM三者之间的关系,以及JDK JRE包含的结构是什么?
  20. steam游戏的计算机要求,吃鸡最低配置(《绝地求生》Steam官方公布:吃鸡最低电脑配置要求)...

热门文章

  1. 医院防统方软件解决方案
  2. 64位系统中32位的打印服务器,windows10-64位系统如何连接window7-32位共享打印机
  3. CS领域论文数据分析
  4. java gbk编码_java中如何得到输入的汉字的GBK编码
  5. 手机归属地查询 API 接口
  6. 2021,属于Golang和Gopher的全新纪元
  7. INNO setup 制作安装包
  8. VS2008 SP1安装失败
  9. eclipse黑色炫酷主题设置1
  10. 破解内网火狐所保存的邮箱账号和密码