SpringBoot(B站黑马)学习笔记
01基础篇
02-1运维实用篇(打包与运行、多环境配置、日志)
02-2开发实用篇(热部署、配置、NoSQL、整合第三方技术)
03SpringCache
04SpringSecurity
文章目录
前言
SpringBoot(B站黑马)学习笔记 02-1运维实用篇(打包与运行、多环境配置、日志)
02-1运维实用篇
实用篇学习目标:
-
运维实用篇
- 能够掌握SpringBoot程序多环境开发
- 能够基于Linux系统发布SpringBoot工程
- 能够解决线上灵活配置SpringBoot工程的需求
-
开发实用篇
- 能够基于SpringBoot整合任意第三方技术
打包与运行
程序打包与运行(SpringBoot程序快速启动 Windows版)
前后端分离合作开发存在的问题
我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 Tomcat
和 Idea
,在自己电脑上启动后端程序,这显然不现实。
后端可以将 SpringBoot
工程打成 jar
包,该 jar
包运行不依赖于 Tomcat
和 Idea
这些工具也可以正常运行,只是这个 jar
包在运行过程中连接和我们自己程序相同的 Mysql
数据库即可。这样就可以解决这个问题,如下图
注意:打jar包maven工程都可以,但不能使用java -jar运行。springboot工程jar包可以是因为依赖了插件,它不仅打包了jar包,还把要用的jar包也一起打了。简单来说就是jar包里还有jar包
1.打jar包 执行maven中的package命令
注意:如果打包前已经有target目录执行打包前建议先执行clean命令,确保我们打包的时候是一个干净的环境
2.启动SpringBoot
在jar包所在文件目录运行cmd 输入java -jar jar包名(输入前几个字母按Tab自动补充)
Ctrl+C停止运行
测试
注意:打包后会执行maven的生命周期,
springboot在打包之前会执行测试过程,如果我们在测试里写了增删改查的操作会影响打包后的执行。线上运行的话肯定是不被允许的。测试环节会有专门的处理方法,我们暂时只能跳过执行过程
程序运行(Linux版)
学习Linux时再讲
多环境开发
多环境开发配置
以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql
,连接自己电脑上的 mysql
即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
来回的修改配置会很麻烦,而 SpringBoot
给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。
环境准备
yaml设置多环境
补充:下图设置环境名称左边划线是过时写法,两种写法都可以看选择
application.properties设置多环境
注意文件夹命名
多环境jar包命令行启动参数设置
问题:当我们把程序打成jar包给测试,测试要换成测试环境,但我们在配置文件里已经写好了。
解决:通过命令启动更改配置,使用临时属性
温馨提醒:
1.打jar包前建议执行clean指令再执行package打jar包指令,因为如果上一次的结果影响本次的操作会出现不必要的麻烦。
2.我们的配置文件中有可能写中文(注释),这种情况打包失败的,需要更改设置
打包
直接启动会发现用的配置文件设定端口
命令行切换配置
命令:java -jar spring.jar --spring.profiles.active=test(配置文件中环境名称)
存在问题:如果测试的82端口占用了,更改后无法正常启动
命令行切换多环境配置端口
命令:java -jar spring.jar --spring.profiles.active=test --server.port=88(将test环境端口切换为88)
java -jar spring.jar --server.port=88(只切换端口)
参数加载优先级
之所以能够使用命令行更改配置是因为它的优先级比配置文件高,官网有优先级介绍,从上往下逐步提高
参考网址:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
多环境开发兼容问题(maven与springboot)
在maven和springboot中都可以配置多环境03Maven高级,如果maven配置开发环境为主,boot配置测试环境为主,但用谁的呢。解决这个问题我们要知道,最终boot工程不是在电脑上使用idea启动,而是使用jar包在服务器用命令行(java -jar)的方式启动。jar包又是maven执行package指令打包,所以maven里的多环境配置是起主导作用的,而boot里的多环境配置仅仅相当于maven打包过程中的工具应该听从maven的控制。
解决兼容问题就是让maven控版本,springboot加载maven中设置的版本
环境准备
1.application.yml读取pom.xml设置
注意,pom.xml中配置的属性只能在当前文件生效,要扩展范围需要配置插件
查看application.yml是否读取成功
配置文件分类
有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下
针对这种情况,SpringBoot
定义了配置文件不同放置的位置;而放在不同位置的优先级时不同。
环境准备
4级:classpath:applicattion.yml(直接放在resource包下)
3级:classpath:config/applicattion.yml (resource包下的config包下)
配置文件前的logo前面基础配置有解释
2级:file:applicattion.yml(打包后跟jar包同级目录下)
1级:file:config/applicattion.yml(打包后跟jar包同级目录下config包下)
上述1级和2级就能解决测试环境根据所需配置环境
注意:
SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,1级需要在 jar
所在位置的 config
目录下创建一个任意名称的文件夹
日志
日志基础操作
日志(log)作用
-
编程期调试代码
-
运营期记录信息
- 记录日常运营重要信息(峰值流量、平均响应时长…)
- 记录应用报错信息(错误堆栈)
- 记录运维过程数据(扩容、宕机、报警…)
基本使用
环境准备
日志默认使用springboot内置的logback
创建日志对象并记录日志
日志的分类等级:
- trace:运行堆栈信息,使用率低
- debug:调试级别 平时写程序调试的习惯应该使用log.debug打印日志,而不是打印输出语句。但打印输出语句目前更容易看得懂才用得多。线上开发还是用日志。
- info:记录运维过程数据
- warn:警告信息
- error:记录报错信息
- fatal:灾难级别 这个级别和error合并了,没有提供对应的api。一般出现fatal系统都崩溃瘫痪了,日志系统也没了,记录也没意义。
一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可。
测试运行
日志成功打印,但会发现debug并没有打印。这就是日志的级别控制问题,我们的系统在启动时用的是info级别,所以看到的只有info以上的。
日志打印级别控制
yml配置文件配置:debug: true 它会把系统启动的所以debug都打印 (巨多)
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
上种设置太简单粗暴了,日志系统通常都提供了细粒度的控制
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
第一种debug:true打印的只是boot有关的。而root是所有的日志比它还多,我们还可以进行更加细致的配置
该设置意思是整体是info级别,controller包下是debug级别
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: info
#设置某个包的日志级别
com.gdit.controller: debug
如果包太多了呢,那不要写很多。我们还可以设置分组
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
# 设置分组
group:
ebank: com.gdit.controller, com.gdit.service, com.gdit.dao
level:
root: info
# 设置分组,对某个组设置日志级别 ebank为自定义名称
ebank: warn
教你一招:优化日志对象创建代码
每个类都要写创建日志对象的语句是不是太麻烦了。我们可以设置一个基础类,然后让每个类都继承基础类,只有就不用重复创建日志对象了
//创建记录日志的对象
private static final Logger log = LoggerFactory.getLogger(BookController.class);
优化
这个思想太强大了,非常值得学习。
这种小功能已经有人帮我做好了。导入lombok后使用注解搞定,日志对象名为log
日志输出格式控制
- %d: 日期时间
- %m: 消息
- %n: 换行
- %p: 日志级别
- %5p: 日志级别宽度设为5个字母 (因为最长的debug是5个字母)
- %clr(%5p): 日志级别宽度设为5个字母并显示成彩色
- %t: 线程名
- %c: 类名
- %40c: 类名40位宽(默认右对齐)
- %-40c: 类名40位宽(左对齐)
- %-40.40c: 类名40位宽,内容超过40就删除(左对齐)
- %clr(%-40.40c){cyan}: 类名40位宽,内容超过40就删除(左对齐),自定义cyan青色显示
模拟原始样式
文件记录日志
日志信息显示,记录已经控制住了,下面就要说一下日志的转存了。日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。
对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。
记录日志到文件中格式非常简单,设置日志文件名即可。
logging:
file:
name: server.log
虽然使用上述格式可以将日志记录下来了,但是面对线上的复杂情况,一个文件记录肯定是不能够满足运维要求的,通常会每天记录日志文件,同时为了便于维护,还要限制每个日志文件的大小。下面给出日志文件的常用配置方式:
以上的日志学习肯定不止这些,这里只是简单的学习整合实用而已,详细的日志记录要结合项目学习
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)