美文网首页推文上热门(千万赞三)
SpringBoot2.x(九)深度揭秘Devtools

SpringBoot2.x(九)深度揭秘Devtools

作者: 学者的小跟班 | 来源:发表于2020-04-16 10:49 被阅读0次

学者学者原创

尊敬的读者朋友,大家好,本文是《springboot2.x独门秘籍》系列的第九篇。本专题的文章将会以SpringBoot项目实战为切入点,带着你应用Spring、SpringBoot的相关知识,并手把手教你整合持久层框架、安全框架、web框架等,让SpringBoot成为你面试和工作中的加分项。 往期精选文章!

01 学习环境(参考)

  • windows10操作系统
  • jdk1.8.0 + maven3.6.0
  • myeclipse编辑器

02 本文主题

上文中,我们介绍了控制器概念、用法以及视图模板的编写方法、使用方法。本文中将介绍如下内容:

  • SpringBoot控制台日志剖析
  • Devtools热部署详解
  • 俯瞰Spring家族成员

03 SpringBoot控制台日志中到底有什么?

日志是追溯系统使用、问题跟踪的依据,是每个应用不可或缺的重要组成部分,我们通常利用进行日志进行Bug定位,合理的收集日志有利于系统的维护。


图9-1 SpringBoot日志

那么,我们每次启动应用都看到的日志都有些什么呢?从图9-1中可以看到,SpringBoot日志大概包括以下几个部分:

  • 时间日期:显示打印日志的时间,精确到毫秒级别
  • 日志级别:日志级别分别是FATAL、ERROR、WARN、INFO、DEBUG、TRACE
  • 进程ID:进程PID
  • 分隔符[---]:用于区分实际日志消息的开始
  • 线程名称:括在方括号中
  • 记录器名称:一般用类名
  • 日志内容

04 Devtools热部署细节

在初始化项目时,我们在pom文件中添加了一个依赖

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

启动项目后,可以在控制台中找到Devtools相关日志,如下

#Devtools功能打印的日志
e.DevToolsPropertyDefaultsPostProcessor :
 Devtools property defaults active!
...
 o.s.b.d.a.OptionalLiveReloadServer   : 
LiveReload server is running on port 35729

那么Devtools到底有什么用呢?顾名思义,Devtools为Spring开发人员提供了一些便利工具,包括:

  • 代码变更后项目自动重启(更方便)
  • 静态资源更新时自动刷新浏览器
  • 自动禁用模板缓存(重点)

Devtools的目的仅仅是在开发阶段使用,所以当项目部署后,它能够很智能的把自己禁用掉。

那么Devtools是如何实现自动重启呢?其实在Devtools运行的时候,应用程序会被加载到JVM两个独立的类加载器中。

其中一个类加载器会加载代码、属性文件以及"src/main/"路径下所有内容。因为这些条目会经常变更,所以会统一加载到一个类加载器中。

另一个类加载器会加载依赖的类库,这些条目不会经常变更。

当Devtools探测到变更的时候,只会重新加载包含代码的类加载器,并重启Spring应用上下文,这个过程中,另一个加载器原封不动,从而减少项目重启时间。

默认情况下,Devtools还会禁用诸如Thymeleaf、FreeMarker等模板引擎的缓存,保证你对模板修改后,在浏览器端一定可以刷新模板。

当应用部署后,Devtools会智能的禁用自己,此时模板缓存生效,再次请求模板时,可以加快加载速度。

如果你更改模板后,连F5刷新浏览器都懒得按,那么Devtools还会提供一个好用的功能。

从日志中可以看到,在某某端口启动了名称为"LiveReload"的服务,其实,该服务就是和Devtools一起启动的。

当它与浏览器插件LiveReload一起使用的时候,就能够在模板、样式表、js等发生改变时自动刷新浏览器。

你可以访问LiveReload官网,以了解如何为你的浏览器安装LiveReload插件。

Spring家族成员

打开Spring官方网站,可以看到如图9-2的内容。


图9-2 Spring官方网站

可以看到,在官网网址首页Project下列举了几个热门框架,如SpringBoot 、SpringData 、SpringCloud、Spring Security等。

你也许听说过;类似于"Spring和Spring MVC有什么区别?"的问题,其实它们之间的区别和联系很容易想明白。

它们都是Spring的家族成员,都是Java web开发的利器,只不过负责的功能不同,Spring负责搭建开发框架,Spring MVC则专门负责web请求、REST API等功能。

其余的Spring家族成员也有各自的职责,如Spring Security负责项目的安全加固,Spring Data负责关系型、非关系型的数据库访问。

05 资源链接

相关文章

网友评论

    本文标题:SpringBoot2.x(九)深度揭秘Devtools

    本文链接:https://www.haomeiwen.com/subject/odelvhtx.html