【SpringBoot学习】02-1运维实用篇(打包与运行、多环境配置、日志)

SpringBoot(B站黑马)学习笔记

01基础篇
02-1运维实用篇(打包与运行、多环境配置、日志)
02-2开发实用篇(热部署、配置、NoSQL、整合第三方技术)
03SpringCache
04SpringSecurity



前言

SpringBoot(B站黑马)学习笔记 02-1运维实用篇(打包与运行、多环境配置、日志)


02-1运维实用篇

实用篇学习目标:

  • 运维实用篇

    • 能够掌握SpringBoot程序多环境开发
    • 能够基于Linux系统发布SpringBoot工程
    • 能够解决线上灵活配置SpringBoot工程的需求
  • 开发实用篇

    • 能够基于SpringBoot整合任意第三方技术

打包与运行

程序打包与运行(SpringBoot程序快速启动 Windows版)

前后端分离合作开发存在的问题

我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 TomcatIdea ,在自己电脑上启动后端程序,这显然不现实。

后端可以将 SpringBoot 工程打成 jar 包,该 jar 包运行不依赖于 TomcatIdea 这些工具也可以正常运行,只是这个 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完整版)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值