学者学者原创
尊敬的读者朋友,大家好,本文是《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 资源链接
- 《阿里巴巴Java开发手册》 提取码:13n9











网友评论