Spring Boot配置文件 Spring日志文件相关的知识

在上文中,小编带领大家创建了一个Spring Boot项目,并且成功的执行了第一个SPring Boot项目(在网页上运行hello world)

那么,本文的主要作用便是带领大家走进:Spring Boot配置文件 && Spring日志文件

首先,来带领大家看一下Spring Boot的配置文件吧!!

Spring Boot的配置文件:

Spring Boot的配置文件的作用:整个项目中所有的重要数据都是在配置文件中配置的!

  1. 数据库的连接信息(包含用户名和密码的设置)
  2. 项目的启动端(设置端口号)
  3. 第三方系统的调用密钥等信息
  4. 用于发现和定位问题的普通日志和异常日志等

那么,我们来想象一下,如果没有配置信息,那么Spring Boot项目就不能连接和操作数据库,甚至是不能保存可用于排查问题的相关日志,所以配置文件的作用也是非常重要的!!

对于Spring Boot配置文件的格式,目前主要有两种:

Spring Boot配置文件的格式

  1. .properties
  2. .yum(yaml)

特殊说明:

  • 两个配置文件从功能上来说是可以同时存在的,但是企业中,通常会规定使用某一种格式的配置文件
  • 如果同一个配置出现再两种格式的配置文件的话,那么以.properties为主!

那么,接下来,我们来看一下.properties配置文件说明吧!

.properties配置文件是最早期的配置文件格式,也是创建Spring Boot项目默认的配置文件

.properties是以键值对的形式配置的,key和value之间,以“=”连接的

            如:配置项目端口号:server.port=8084

其他配置:

# 配置数据库的连接字符串
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=zhao05306910a
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置 Mybatis 的 xml 保存路径
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
# 配置打印 MyBatis 执行的 SQL
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置打印 MyBatis 执行的 SQL
logging.level.com.mybatis.demo=debug
# 配置运行环境
spring.profiles.active=dev

配置文件中,以“#”来添加注释文本!!

注意:在上述的配置文件中,涉及一些小编自定义的内容!!请各位老铁不要直接复制粘贴就使用,然后运行失败再来找小编吐槽~~

配置项目类:

  • 系统配置项:比如server.port/spring.datasource.url……《——》系统
  • 用户自定义配置(非系统配置项)《——》key用户自定义

设置项目端口号:

server.port=9090《——》更改端口号

用户自定义配置:

javaclass=java101

如果在项目中,想要主动的读取配置文件(用户自定义)中的内容,可以使用@Value注解来实现!

@Value("${servler.port}")  //注意一定要是${key}的格式!!
@Value("${javaclass}")

那么,我们来看一下小编的代码吧!

@Controller
@ResponseBody //加在类上,表示当前类中的所有方法返回的都是非静态页面的数据
public class Read {@Value("${test.javaclass}")private String myconfig;@RequestMapping("/sayHi")private String sayHi(){return myconfig;}
}

经过上述的代码,我们可以看出:

properties优点:
  1. 系统默认的配置文件
  2. properties配置项的优先级比yml高
  3. 格式简单,不易出错

缺点:写法比较冗余!

yml优点分析:
  • yml是一个可读性高,写法简单,易于理解,它的语言和JSON语言类似
  • yml支持更多的数据类型,它可以简单表达清单(数组),散列表,标量等数据形态,它使用空白符号缩进和大量依赖的外观的特色,特别适合用来表达式编辑数据结构,各种配置文件等
  • yum支持更多的编程语言,它不止是Java中可以使用,在Golong,PHP,Python,Ruby,JavaScript,Perl中也可以使用。

yml是树形结构的配置文件,它的基础语法是“key: value"(注意,key和value之间使用的是英文的冒号加空格组成,空格不可省略!)

使用yml连接数据库:下述代码来自于笔者的项目中(含有不少自定义的内容,请各位老铁自行分析)

# 配置数据库的连接字符串
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8username: rootpassword: 12345678driver-class-name: com.mysql.cj.jdbc.Driver
# 设置 Mybatis 的 xml 保存路径
mybatis:mapper-locations: classpath:mapper/*Mapper.xmlconfiguration: # 配置打印 MyBatis 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 配置打印 MyBatis 执行的 SQL
logging:level:com:example:demo: debug

yml中配置不同数据类型及null

字符串:

string-value1: hello/n world     #  /n指换行符
string-value2: 'hello world'     #  单引号
string-value3: "hello world"     #  双引号

布尔类型:

boolean-value1: true
boolean-value2: fales

整数:

int-value1: 10
int-value2: 0b1010_0111_0100_1010_1110   #二进制 

浮点数:

float-value1: 3.14159
float-value2: 3.14159e-5   #科学计数法

null:

#null演示:
~                  #TAB键上面的波浪线
null-value: ~

yml读取配置的方式和properties相同,使用@Value("${key}")的格式!

那么,如何在yum配置文件中配置对象呢??

student:id: 1name: javaage: 18#注意空格

当然,我们也有着另一种写法:(行内写法)

student: {id: 1, name: java, age: 18}  
#注意空格

如果在yml配置文件中配置了对象,此时在使用@Value的格式,只能得到某单个属性,不能得到完整的student对象,因此,我们使用@ConfigurationProperties来获取!!

package com.example.demo.controller;import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component  //存对象,随着Spring Boot的启动而启动
@Setter
@Getter
@ToString
@ConfigurationProperties("student")
public class StudentComponent {private int id;private String name;private int age;@Autowired    //取对象(注入)private StudentComponent studentComponent;@PostConstructpublic void doPostCnostruct(){System.out.println(studentComponent);}
}
接下来,我们来看一下Spring Boot不同平台的配置规则吧!!
Spring Boot不同平台的配置规则;
  1. 必须有主配置文件,主配置文件名必须是:application.yml(或者是:application.properties)
  2. 不同平台的配置文件,每个平台拥有一个配置文件,配置文件的名称有要求:application-xxx.yml(或者是:application-xxx.properties)
    application-xxx.yml(或者是:application-xxx.properties)如:
    开发环境:  application-dev.yml(或者是:application-dev.properties)
    测试环境:  application-text.yml(或者是:application-text.properties)
    生成环境:  application-prod.yml(或者是:application-prod.properties)
    主配置文件:application.yml(或者是:application.properties)//存放公共资源项

Spring日志文件:

对于日志,想必各位老铁应该知道有啥用吧!!作用很大哟!

  1. 记录错误日志和警告日志(发现和定位问题)
  2. 用户日志
  3. 系统日志
  4. 程序执行日志
  5. ………………

那么,在Spring中,我们有着以下的疑问:

  • Spring Boot内置了日志框架(不然也输出不了日志)
  • 默认情况下,输出的日志并非是开发者自定义和打印的,那开发者怎么在程序中自定义打印日志呢??
  • 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么,怎么把日志永久的保存下来呢??

那么,我们有着:

Spring Boot日志打印:

  1. 得到日志对象
  2. 使用日志对象提供的方法打印日志

那么,我们来看一下接下来的代码:

@Controller
@ResponseBody //加在类上,表示当前类中的所有方法返回的都是非静态页面的数据
public class TestController {//得到日志对象private static final Logger log= ILoggerFactory.getLogger(TestController.class);/*** private :独有的日志* static :方法中调用* final:不能被修改* Logger :日志类型(org.slf4j包底下)* TestController.class :类名*///打印日志@RequestMapping("/sayHi")public String sayHi(){log.trace("I'm trace"); //自定义内容log.trace("I'm debug");log.trace("I'm info");log.trace("I'm warn");log.trace("I'm error");return "hello world";}
}

在上述代码中我们需要注意的是:Logger属于org.slf4j包底下!!

根据最后的打印结果,有:打印日志时间,日志级别,打印日志线程id,打印日志线程名称,包名.类名,日志内容(自定义)等内容。在此感兴趣的各位老铁可自行测试,小编便不在带领大家进行进一步的测试了!!

@RestController  //@RestController = @Controller + @ResponseBody
public class studentController {private static final Logger log= ILoggerFactory.getLogger(studentController.class);@RequestMapping("/stu/sayHi")public String sayHi(){log.info("student info");log.error("student error");return "student sayHi";}
}

接下来,我们来看一下日志级别吧!

日志级别:

  • trace:微量少许的意思,级别太低
  • debug:需要调试的时候的关键信息打印
  • info:普通的打印信息(默认日志级别)
  • warn:警告,不影响使用,但是要注意的问题
  • error:错误信息级别较高的错误日志信息
  • fatal:致命的,因为代码异常导致程序退出执行的事件

值得注意的是:上述的列出的几个级别:从上往下,级别由低到高,trace和debug由于级别太低,在日志中看不到,只有从info(默认级别)往下更高的级别,在日志中才可以看到!!

设置日志级别:

设置日志级别:application.yml(application.properties)配置文件中:

#日志级别设置(yml文件)
logginglevel:root: error     #默认级别为errorcom:example:demo:controller: trace   #com.example.demo.controller文件专门设置trace

注意:上述的配置文件是在application.yml中配置的,对于application.properties配置文件,写法不一样,但是,大致的内容是一样的,所以在此小编便不再做过多的讲述!!

日志持久化:

在之前的日志都是输出在控制台上的,然而,在生产环境上,咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化!

想要将日志持久化,只需要在配置文件中指定日志的存储目录,或者是指定日志保存文件名之后,Spring Boot就会将控制台的日志写到相应的目录或者文件下了!

Spring Boot日志持久化(将日志保存下来)有两种方式:

  1. 设置日志保存路径

    具体代码如下:

    #设置日志保存路径
    Logging:file:path: D:\\home\\    #防止出现转义字符!#运行后,会自动创建一个spring.log的文件,用VS Code打开,会查看当前日志信息!#尽量不要将保存的盘符放在系统盘(C盘),路径中不要出现中文!
    

    尽量不要将保存的盘符放在系统盘(C盘),路径中不要出现中文!

    观察得出结论,日志文件一旦产生,那么日志文件及其内容就会永久的保存,不会出现文件或内容的丢失,无论何时,无论和操作都会保存以上的特性!

  2. 设置日志保存名称
    #设置日志保存名称
    Logging:file:name: springBoot.log    #没有指定目录,默认放在该项目的文件夹下!#运行后,在该项目的文件夹下会自动创建一个springBoot.log的文件,用VS Code打开,会查看当前日志信息!#尽量不要将保存的盘符放在系统盘(C盘),路径中不要出现中文!
     1.没有指定目录,默认放在该项目的文件夹下!2.运行后,在该项目的文件夹下会自动创建一个springBoot.log的文件,用VS Code打开,会查看当前日志信息!3.尽量不要将保存的盘符放在系统盘(C盘),路径中不要出现中文!
  3. 既指定保存路径又指定保存名称:

    Logging:file:name: D\\home\\springboot.log
生产级别的日志分类:根据业务场景来订
  1. 程序运行日志(放在文件中)
  2. 业务日志(存放在数据库中)

日志大小问题:

Logging.logback.rollingpolicy.max-file-size 《——》 10mb     

如果超过10mb,则会自动创建新的文件(名称为原文件名+1,2,3……n);

其他扩展:

综合练习:

将controller包下的error级别以上的日志保存到log.all.log下

将service下warn级别以上的日志保存到log.all.log下

实现关键步骤:

  1. 不同包定义不同的日志级别
  2. 使用日志对象打印所有类型的数据
  3. 设置固定的日志保存文件名

如果你已经创建好一个Spring Boot项目了,那么如何快速添加Spring Boot依赖呢??

IDEA安装插件EditStarters

然后在pom.xml文件中,右键,Generate…,EditStarters……,🆗

然后搜索你想要添加的依赖,添加后刷新Maven(右上角)即可!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter之graphic图表自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法&#xff0c;接收三个参数Size类型&#xff0c;Offset类型&#xff0c;Map<int, Tuple>类型。可查到的文档是真的少&#xff0c;所以只能在源码中扒拉例子&#xff0c;做符合需求的修改。 官方github示例 …

枚举与应用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 枚举简介 枚举是一种特…

CentOS 7 使用异步网络框架Libevent

CentOS 7 安装Libevent库 libevent github地址&#xff1a;https://github.com/libevent/libevent 步骤1&#xff1a;首先&#xff0c;你需要下载libevent的源代码。你可以从github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&…

C语言 - 基础

C 语言 1. Hello World #include <stdio.h>int main(int argc, const char *argv[]) {printf("hello world\n");return 0; }注意: 所有的标点符号必须在英文状态下输入单词不要写错注意空格 创建 C语言 程序步骤&#xff1a; 1、创建一个文档&#xff0c;以…

Springboot 南阳旅游平台-计算机毕设 附源码 31829

Springboot 南阳旅游平台 目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3 论文结构与章节安排 2 南阳旅游平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析…

芙蓉花 欣赏

芙蓉&#xff08;Hibiscus mutabilis Linn&#xff09;是一种锦葵科、木槿属植物原名&#xff1a;木芙蓉&#xff0c;别名&#xff1a;芙蓉花、拒霜花、木莲、地芙蓉、华木、酒醉芙蓉。其花或白或粉或赤&#xff0c;皎若芙蓉出水&#xff0c;艳似菡萏展瓣&#xff0c;故有“芙蓉…

Ubuntu服务器/工作站常见故障修复记录

日常写代码写方案文档&#xff0c;偶尔遇上服务器出现问题的时候&#xff0c;也需要充当一把运维工程师&#xff0c;此帖用来记录服务器报错的一些解决方案&#xff0c;仅供参考&#xff01; 文章目录 一、服务器简介二、机箱拆解三、基本操作3.1 F2进入BIOS3.2 F12进入Boot Me…

教你IDEA解决GIT冲突

前言 GIT基本上贯穿我们的开发生涯&#xff0c;之所以要使用git也是有很多优点的 &#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339; 1.通俗易懂点&#xff0c;保存代码不丢失&#xff1a;防止因内存&#xff0c;操…

字符串函数

读取字符串的函数 1.gets()函数 说明&#xff1a;gets函数简单易用&#xff0c;它读取整行输入&#xff0c;直至遇到换行符&#xff0c;然后丢掉换行符&#xff0c;储存其余字符&#xff0c;并在末尾添加一个空字符使其成为一个C字符串。它经常和puts&#xff08;&#xff09;…

从零开始的RISC-V模拟器开发(一)环境搭建

前言 博主这系列文章是跟随中科院吴伟老师的b站公开课&#xff1a;[完结]从零开始的RISC-V模拟器开发第一季2021春季_哔哩哔哩_bilibili 记录的笔记。仅供学习使用&#xff0c;侵删&#xff01; 苦逼的博主现在自己毕设也是要设计类似的东西。哎。我需要做的是给一个现成的 R…

STM32 MAP文件

文章目录 1 生成Map2 map中概念3 文件分析流程3.1 Section Cross References3.2 Removing Unused input sections from the image&#xff08;移除未使用的段&#xff09;3.3 Memory Map of the image&#xff08;映像的内存分布&#xff09;3.3.1 加载域3.3.2 运行域 4 代码运…

机器学习探索计划——KNN算法流程的简易了解

文章目录 数据准备阶段KNN预测的过程1.计算新样本与已知样本点的距离2.按照举例排序3.确定k值4.距离最近的k个点投票 scikit-learn中的KNN算法 数据准备阶段 import matplotlib.pyplot as plt import numpy as np# 样本特征 data_X [[0.5, 2],[1.8, 3],[3.9, 1],[4.7, 4],[6.…

软件测试:超详细的Jmeter基础教程

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a; &#xff…

基于springboot实现高校食堂移动预约点餐系统【项目源码】

基于springboot实现高校食堂移动预约点餐系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备…

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注&#xff1a; 上面命令中rancher的版本v2.6.5&#xff0c;仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本&#xff0c;在github上查看&#xff1a;Release Release v2.6.5 ranche…

2023 年 认证杯 小美赛 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在认证杯 小美赛前为大家提供了许多资料的内容呀&am…

基于springboot实现乒乓球预约管理系统项目【项目源码】

基于springboot实现乒乓球预约管理系统演示 系统的开发环境 浏览器&#xff1a;IE 8.1&#xff08;推荐6.0以上&#xff09; 开发使用语言&#xff1a;JAVA JDK版本&#xff1a;JDK_8 数据库管理系统软件&#xff1a;Mysql 运行平台&#xff1a;Windows 7 运行环境&#…

破案现场:Docker容器资源限制导致的oom问题

破案现场&#xff1a;Docker容器资源限制导致的oom问题 01 事故现场02 问题定位03 对症下药04 后记 原文来自于微信公众号“运维之美” https://mp.weixin.qq.com/s?__bizMzA5NDY1MTM3MA&mid2247484902&idx1&sn8394aefd884ee09ea546fcd400dd233c&chksm904a136…

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到&#xff0c;有没有可以无限提取的代理IP&#xff1f;就是比如我一秒钟提取几万、几十万次&#xff0c;或者很多台机器同时调用API提取链接&#xff0c;这样可以吗&#xff1f;看到这个问题&#xff0c;不禁沉思起来&#xff0c;其实理论上是存…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种&#xff0c;分别是*args和**kwargs&#xff0c; 这里面的关键是一个和两个星号的区别&#xff0c;而不是args和kwargs在名字上的区别&#…