第03章 SpringBoot 配置详解

news/2024/4/29 3:35:38/文章来源:https://blog.csdn.net/a1234556667/article/details/126447083

序言

1.内容介绍

​ 本章介绍了配置文件的作用、语法结构以及基于多种方式进行配置文件的配置实现,同时对于SpringBoot如何集成logback日志框架进行日志的写入进行了详细的实战演示。

2.知识目标

  • 掌握系统配置文件的结构
  • 掌握系统配置文件、自定义配置文件的作用
  • 掌握logback配置文件结构

3.技能目标

  • 熟练读取系统配置文件,便于进行项目全局配置
  • 熟练操作自定义配置文件的读取,便于多模块项目中资源文件的灵活配置
  • 熟练完成与日志框架logback的集成,达到精准地记录项目运行期间

4.实践案例

  • 自定义配置文件的读取操作
  • SpringBoot集成logback实现日志记录

5.内容目录

  • 1.配置文件概述
  • 2.配置文件解析
  • 3.集成logback日志框架

第1节 配置文件概述

1. 配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

• application.properties

• application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAML(YAML Ain’t Markup Language)

YAML A Markup Language:是一个标记语言

.yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json/xml等更适合做配置文件

标记语言:

以前的配置文件;大多都使用的是 xxxx.xml文件;

YAML:以数据为中心,比json、xml等更适合做配置文件;

YAML:配置例子

server:port: 8081

XML:

 

<server> <port>8081</port> </server>

2. YAML语法:

2.1 基本语法

k:(空格)v:表示一对键值对(空格必须有);

空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:port: 8081path: /hello

属性和值也是大小写敏感;

2.2 值的写法

  • 字面量:普通的值(数字,字符串,布尔)

    • k: v:字面直接来写;
    • 字符串默认不用加上单引号或者双引号;
    • “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
    • name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
    • ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
    • name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
  • 对象、Map(属性和值)(键值对):

    • k: v:在下一行来写对象的属性和值的关系;注意缩进
    • 对象还是k: v的方式
    friends:lastName: zhangsanage: 20
    

    行内写法:

    friends: {lastName: zhangsan,age: 18}
    
  • 数组(List、Set):

    • 用- 值表示数组中的一个元素
    pets:- cat- dog- pig
    

    行内写法

    pets: [cat,dog,pig]
    

第2节 配置文件解析

  • 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件方式有两种。
  • 编写核心配置文件application.properties内容:
    • test.msg = Hello World SpringBoot

1. 使用@Value方式(推荐)

  • 注意 :@Value的${}中包含的是核心配置文件中的键名。

  • 编写ReadPropertiesController

  • 编写属性,采用@Value进行属性值写入

 

@RestController public class ReadPropertiesController { @Value("${test.msg}") private String msg; @RequestMapping(value="/testValue") public String test1(){ return "@Value方式,得到的msg:"+msg; } }

2. 使用Environment方式

  • 注意:该方式是依赖注入的Environment 来完成

  • 需要在创建的成员变量private Environment env上加上@Autowired

  • 使用env.getProperty(“键名”)即可读取对应的值

  • 比如:

     

    @Autowired private Environment env; @RequestMapping(value="/testEnv") public String test2(){ return "env方式:"+env.getProperty("test.msg"); }

3. 读取自定义配置文件信息

  • 为了不破坏核心文件,但又需要有自定义的配置信息,一般会选择自定义配置文件来存放信息

  • 在resources目录下创建目录 config

    • 创建自定义配置信息mysql.properties,并编写内容
    mysql.username=root
    mysql.password=1234
    
  • 创建config代码包

    • 创建类文件MySqlProperties.java,并编程
     

    @ConfigurationProperties(prefix = "mysql",ignoreUnknownFields = false) @PropertySource("classpath:config/mysql.properties") @Component public class MySqlProperties { private String username; private String password; //生成getter and setter方法 ...... }

  • 创建MySqlController.java

    • 读取自定义信息
     

    @EnableConfigurationProperties(MySqlProperties.class) @RestController public class MySqlController { @Autowired MySqlProperties mySqlProperties; @RequestMapping(value="/test") public String test(){ String username = mySqlProperties.getUsername(); String password = mySqlProperties.getPassword(); return "用户名:"+username+" , 密码:"+password; } }


第3节 集成logback日志框架

1. logback概述

  • logback是一个日志框架,是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。
  • logback特点:
    • 支持xml、Groovy方式进行配置
    • 支持配置文件中加入条件判断
    • 更为强大的过滤器
    • 自动压缩历史日志
    • 自动去除旧的日志文件
  • SpringBoot日志采用logback+slf4j
    • slf4j不是具体的日志实现框架,而是提供了常用的日志接口,在使用的时候我们可以直接调用其接口,通过使用提供的,隐藏了日志的具体实现。
    • logback则提供了日志记录的功能。
    • logback原生实现了slf4j的api。

2. logback配置文件结构

  • :配置的根节点
  • :是的子节点,负责写日志的组件
    • name:appender的名称
    • class:appender的全限定名,对应某个具体的Appender类名,比如ConsoleAppender、FileAppender
    • :是日志的格式
      • %d{yyyy-MM-dd HH:mm:ss.SSS}:日期
      • %thread:打印日志的线程
      • %-5level:日志级别从左显示5个字符长度,例如:DEBUG
      • %logger{50}:日志输出的类名,50表示字符长度
      • %msg:日志输出内容
      • %n:换行符
    • :用来设置日志的滚动策略,当达到条件后会自动将条件前的日志生成一个备份日志文件,条件后的日志输出到最新的日志文件中。
      • 常用的是按照时间来滚动(使用的类TimeBaseRollingPolicy
      • 还有一种就是基于索引来实现(使用的类FixedWindowRollingPolicy)。
    • :负责把事件转换成字节数组并把字节数组写到合适的输出流

3. SpringBoot集成logback日志框架

  • 需求:按照时间和日志大小滚动生成日志

  • resources目录下添加logback.xml日志配置文件

     

    <configuration> <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n" /> <property name="DATA_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss},%msg%n" /> <property name="LOG_LEVEL" value="INFO"/> <!-- 标准输出日志 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${LOG_LEVEL}</level> </filter> </appender> <!-- 数据采集日志记录, 保存到文件 --> <appender name="COLLECT_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>data/data_file.%d{yyyy-MM-dd}_%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>10</maxHistory> <totalSizeCap>10GB</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>${DATA_PATTERN}</pattern> </encoder> </appender> <!-- 指定日志输出级别 --> <logger name="cn.com.chinahitch.springboot_hello" level="${LOG_LEVEL}" addtivity="false"> <appender-ref ref="COLLECT_ROLLING" /> </logger> <root level="${LOG_LEVEL}"> <appender-ref ref="STDOUT" /> </root> </configuration>

  • 在HelloController.java中添加日志记录实现

     

    @RestController public class HelloController { //创建Logger对象 private static Logger logger = LoggerFactory.getLogger(HelloController.class); @RequestMapping(value="/hello") public String index(){ //日志信息写入 logger.info("HelloController.................."); return "Hello World!"; } }

  • 启动服务,执行http://localhost:8080/hello,观察效果

    • 控制台生成日志

    • 本地生成日志文件

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

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

相关文章

神经网络相关性系数r公式,神经网络预测数据

MATLAB神经网络训练图中R是什么 谷歌人工智能写作项目&#xff1a;神经网络伪原创 相关系数r的计算公式是什么&#xff1f; 相关系数介于区间[-1&#xff0c;1]好文案。当相关系数为-1&#xff0c;表示完全负相关&#xff0c;表明两项资产的收益率变化方向和变化幅度容完全相…

QML初学者教程

QML初学者教程 使用 QML、Qt 5、JavaScript 和 C 在 windows、mac 和 linux 上进行跨平台 GUI 应用程序开发 课程英文名&#xff1a;qml-for-beginners 此视频教程共5.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下载地址 百度网盘地…

Windows与网络基础-3-虚拟机安装Kali Linux

目录 一、虚拟机软件和ios镜像文件 二、Kali Linux安装 2.1 文件—>新建虚拟机 2.2 选择典型安装 2.3 选择稍后安装 2.4 选择操作系统类型和版本 2.5 虚拟机命名和安装路径选择 2.6 选择磁盘大小 2.7 自定义硬件配置 三、进入系统&#xff0c;安装带图形化界面 四…

毕业那年的大学生创新立项

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

面试题-谈谈你对JVM的理解

首先问一个问题&#xff0c;jvm、jdk、jre三者的区别&#xff1f;再去谈其他的 JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a;虚拟机 &#xff0c;源文件.java在虚拟机中通过编译器编译成字节码文件.class&#xff0c;是整个java实现跨平台的最核心的部分 操作…

什么是快应用?与原生APP相比优势在哪里

目前&#xff0c;头部互联网企业以及手机厂商两大阵营&#xff0c;正打得不可开交。腾讯、阿里、百度、今日头条等头部互联网企业&#xff0c;齐齐发力小程序&#xff0c;借助于开发者的力量&#xff0c;来强大自身的服务能力&#xff0c;提高超级平台的粘性&#xff0c;深挖存…

vue路由原理

前端路由切换原理&#xff1a;本质就是监听url的变化&#xff0c;然后匹配路由规则&#xff0c;显示相应的页面&#xff0c;并且不刷新页面。目前单页面应用实现路由的方式只有俩种&#xff1a; hash模式 history模式 hash模式相当于瞄点跳转。监听url#后面的传值发生变化&…

idea常用快捷键和插件

快捷键 查看父子关系图:ctrlaltu 全局搜索ctrlshirtF 全局替换:CtrlshirtR 插件 汉化Chinese 配置文件yml转properties 代码预览插件: MyBatis增强插件:MybatisX 快速定位接口工具(RestfulToolkit-fix) 安装之后使用快捷键"Ctrl\"或"CtrlAltN"调出搜…

Leetcode 946.验证栈序列

1.题目描述 给定 pushed 和 popped 两个序列&#xff0c;每个序列中的 值都不重复&#xff0c;只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false 。 输入&#xff1a;pushed [1,2,3,4,5…

基于数字孪生的智慧城市是如何发展的?

数字孪生是指充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。简而言之&#xff0c;数字孪生就是在一个设备或系统的基础上创造一个克…

零基础学Java有哪些必看书?推荐这5本

零基础学Java初学者&#xff0c;想要入门&#xff0c;应该多看一些关于Java的书&#xff0c;先充实理论基础。然而Java的技术知识是海量的&#xff0c;市面上关于Java的书令人眼花缭乱&#xff0c;零基础的小白完全不知道该看哪本书。那么&#xff0c;零基础学Java有哪些必看书…

阿里巴巴微服务核心手册:Spring Boot+Spring cloud+Dubbo

前言 微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题。但大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务&#xff0c;而红帽说 API 应该是重点。 企业和服务提供商正在寻找更好的方法将应用程序部署在云环境中&#xff0c;微服务…

opencv-python之位平面分解与数字水印

位平面分解与数字水印位平面分解与数字水印位平面分解1.图像预处理2.构造提取矩阵3.位平面提取4.阈值处理5.显示图像简单的数字水印1.载体图像预处理2.水印图像处理3.水印添加4.水印提取位平面分解与数字水印 两张素材: 位平面分解 图像矩阵中的每个值是一个八位二进制数&…

技术分享 | 黑盒测试方法论—等价类

等价类划分是一种重要的、常用的黑盒测试方法&#xff0c;不需要考虑程序的内部结构&#xff0c;只需要考虑程序的输入规格。它将不能穷举的测试过程进行合理分类&#xff0c;从而保证设计出来的测试用例具有完整性和代表性。需要把用户所有可能输入的数据&#xff0c;划分成若…

JAVA----钉钉机器人消息样式,关于PC 端与手机端文字消息样式显示不统一

关于PC 端与手机端文字消息样式显示不统一 颜色 String message "<font color#e60020>" 欢迎您加入公司&#xff01; "</font>";不加引号 或 加双引号String message "<font color\"#e60020\">" 欢迎您加入公…

新课标、新考法,猿辅导创新教育研究院全面拆解新课标

“义务教育课程方案和课程标准&#xff08;2022 年版&#xff09;”&#xff0c;也就是众多周知的“新课标”已于今年4月正式颁布。近日&#xff0c;各地的2022秋季学期已陆续开学&#xff0c;这版新修订的义务教育课程也将进入实施阶段。那么&#xff0c;这版新课标究竟有哪些…

RocketMQ的架构设计

目录 1 、技术架构 2、部署架构 2.1、RocketMQ 网络部署特点 2.2、结合部署架构图&#xff0c;描述集群工作流程&#xff1a; 1 、技术架构 RocketMQ架构上主要分为四部分&#xff0c;如上图所示: Producer&#xff1a;消息发布的角色&#xff0c;支持分布式集群方式部署。…

图神经网络(三):数学基础

一.复数空间 在实数空间中&#xff0c;加法、减法可以看成是沿数轴的左右平移&#xff0c;乘法、除法可以看成是沿数轴的拉伸和压缩。但是在现实生活中除了平移和缩放以外&#xff0c;还存在旋转。在复数发明之前&#xff0c;处理旋转问题是非常麻烦的。 1.复数的定义 i2i^2i…

yolo系列之yolov3(3)

文章目录前言v3改动backBone先验框的设定改变特征图的提取loss函数的修改softmax 改进MSE 和交叉熵损失函数前言 v1和v2可以参考前两篇文章v1&#xff1a;https://blog.csdn.net/monk96/article/details/126603180?spm1001.2014.3001.5502v2:https://blog.csdn.net/monk96/ar…

Redis 非关系型数据库学习(三)---- Redis 基础知识

文章目录Redis 非关系型数据库学习&#xff08;三&#xff09;---- Redis 基础知识&#xff08;1&#xff09;Redis 数据库select 切换当前数据库Dbsize 查看数据库key数量&#xff08;2&#xff09;查看数据库的keykeys [partten]&#xff08;3&#xff09;清除数据库的 keyfl…