springboot3 一些听课笔记(1)

文章目录

  • 一、日志框架
  • 二、springboot 自动配置
  • 三 、springweb
    • 3.1
    • 3.2 自己编写一个messageconvert
      • 3.2.2 如果我们想让其支持yaml格式呢?


一、日志框架

springboot底层 默认使用logback+sjf4j作为日志框架。

1、每个 starter 场景,都会导入一个核心场景 spring-boot-starter。
2、核心场景引入了日志的所用功能 spring-boot-starter-logging。

在程序一启动就会使用日志框架。
如果我们想要更改配置,那么我们可以在application文件中直接修改。
如果觉得不够,我们可以写一个logback-spring.xml文件来配置。
如果我们想要使用其他日志,可以首先在依赖中排除默认框架,然后导入我们要用的日志框架。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 如果第三方框架使用了其他日志框架,如 jul,可以排除掉这个框架的默认日志 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

我们可以在properties中配置,也可以写xml文件来进行配置
总结:
1、导入任何第三方框架,先排除它的日志包,因为 Boot 底层控制好了日志。

2、修改 application.properties 配置文件,就可以调整日志的所有行为。如果不够,可以编写日志框架自己的配置文件放在类路径下就行,比如 logback-spring.xml,log4j2-spring.xml。

3、如需对接专业日志系统,也只需要把 logback 记录的日志灌倒 kafka 之类的中间件,这和 SpringBoot 没关系,都是日志框架自己的配置,修改配置文件即可。

4、业务中使用 slf4j-api 记录日志,不要再用 System.out.println() 了

二、springboot 自动配置

自己的理解:springboot有各种启动器,如果我们配置了启动器,就会从
在这里插入图片描述
在这里插入图片描述
这里边也就是
在这里插入图片描述
这里找到我们要自动配置的组件。
每个自动配置类其实都会有一些属性绑定,为了给组件添加属性,比如serve-port默认是8080.
通过
在这里插入图片描述
可以找到属性的类,在这里插入图片描述
属性的类有前缀,证明我们可以在properties文件中通过该前缀来修改属性的值。

如果是第三方的启动器,则springboot就会去找相应的jar包,比如mybatis
在这里插入图片描述
也会有该内容,导入我们需要的组件。然后通过属性来配置。
在这里插入图片描述
多理解吧,目前理解的是这样。
当我们导入依赖时,springboot管理的就会直接在这里
这里找相应的自动配置类,如果是第三方就会去找其jar包下的自动配置类,然后将自动配置导入,添加我们需要的bean组件,同时给bean组件需要的属性赋值。通过属性文件。

三 、springweb

3.1

如果我们想要配置自己的springmvc配置,可以采用自动,手自一体或者自动的方式。
我们加入Configration 然后继承 WebMvcConfigurer。

但是为什么继承WebMvcConfigurer 就能实现配置呢?

在这里插入图片描述
自动配置类中有一个这个类,主要是它会把所有的Webconfigure添加进去。把方法加进去。其实底层还是调用WebMvcConfigurer 的相应方法。在这里插入图片描述

3.2 自己编写一个messageconvert

中间媒介默认是支持json的
在这里插入图片描述
我们可以导入xml依赖,则也可以支持xml格式

        <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId></dependency>

可以在我们要输出的类前加上该注解,但我试了不加该注解,也可以生效在这里插入图片描述
我们可以通过请求头的Accept来告知服务器我们想要的类型,这是默认可以的。
但是如果我们想要通过url请求参数来告知,就需要进行配置
在这里插入图片描述
在这里插入图片描述
默认是format我们可以修改参数名。

3.2.2 如果我们想让其支持yaml格式呢?

1、首先,我们需要告知springboot我们新增了一个协商类型,在配置文件中

spring.mvc.contentnegotiation.media-types.yaml=text/yaml

spring.mvc.contentnegotiation.media-types 这些是必须的,后边是自定义的。
2、之后 我们需要导入一个支持yaml的依赖。

        <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>

3、编写一个我们自己的MessageConvert(示例写法)

package com.cku.demo.config;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.stereotype.Controller;import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;/*** @ClassName MyyamlHttpMessageConvet* @Description TODO* @Author lukcy* @Date 2024/6/5 15:06* @Version 1.0*/
@Configuration
public class MyyamlHttpMessageConvet extends AbstractHttpMessageConverter {private ObjectMapper objectMapper = null; //把对象转成yamlpublic MyyamlHttpMessageConvet(){//告诉SpringBoot这个MessageConverter支持哪种媒体类型  //媒体类型super(new MediaType("text", "yaml", Charset.forName("UTF-8")));YAMLFactory factory = new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);this.objectMapper = new ObjectMapper(factory);}@Override//哪个类可以支持该消息转换protected boolean supports(Class clazz) {return true;}@Override//requestBody 时使用protected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {return null;}@Override//responseBody 时使用protected void writeInternal(Object methodRetuenValue, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {try(OutputStream body = outputMessage.getBody()){this.objectMapper.writeValue(body,methodRetuenValue);}}
}

4、由于WebMvcConfigurer 可以帮我们添加一个配置 我们导入一个WebMvcConfigurer,然后添加我们的消息转换器。

package com.cku.demo.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.List;/*** @ClassName Myconfig* @Description TODO* @Author lukcy* @Date 2024/6/5 15:15* @Version 1.0*/
@Configuration
public class Myconfig {@Beanpublic WebMvcConfigurer webMvcConfigurer(){return new WebMvcConfigurer() {@Override //配置一个能把对象转为yaml的messageConverterpublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new MyyamlHttpMessageConvet());}};
}}

成功!

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

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

相关文章

10_JavaWeb过滤器

文章目录 过滤器1.过滤器的实现1.1 实现过滤器1.2 配置过滤器1.2.1 过滤器的xml方式1.2.2 过滤器的注解方式 2. 过滤器的生命周期3. 过滤器链使用 过滤器 生活举例: 公司前台,停车场安保,地铁验票闸机 java中过滤仅仅是对请求做出过滤 客户端向服务器发出请求&#xff0c;在服…

Jail管理器AppJail的使用@FreeBSD

Jail的简介 Jail是FreeBSD操作系统中一个功能强大的安全机制&#xff0c;自FreeBSD 4.X版本起便投入使用&#xff0c;并且随着系统的发展&#xff0c;其功能、效率、稳定性和安全性得到了持续的强化。 Jail基于chroot的概念&#xff0c;通过更改一系列程序的根目录&#xff0…

基于包围盒的机械臂防碰撞算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 5.完整工程文件 1.课题概述 基于包围盒的机械臂防碰撞算法。在实际情况中&#xff0c;由于很多对象结构较为复杂&#xff0c;当目标对象与障碍物之间的包围盒相交的时候&#xff0c;而两个物体并不相交。这就需要进一步划…

js 一维数组转多维数组

效果图&#xff1a; //源数组const arrList [{"id": 1,"code": "001","name": "第一个","parentCode": "",},{"id": 2,"code": "00101","name": "第一…

springboot项目中第三方jar包打包进jar包

springboot项目中&#xff0c;如果手动引入了jar包&#xff0c;打包时不会将手动引入的第三方jar包打包进价包里&#xff0c;如何处理&#xff1f; 若第三方的jar包的lib和src同级&#xff0c;则maven打包时默认不会将lib下的jar包打包进jar包&#xff0c;处理方式有两种&#…

Golang | Leetcode Golang题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; func cloneGraph(node *Node) *Node {if node nil {return node}visited : map[*Node]*Node{}// 将题目给定的节点添加到队列queue : []*Node{node}// 克隆第一个节点并存储到哈希表中visited[node] &Node{node.Val, []*Node{}}// 广…

nginx --- 反向代理|负载均衡 | 动静分离

目录 反向代理如何配置 1、反向代理实例一 2、反向代理实例二 ocation 指令说明 Nginx 负载均衡 负载均衡常用算法 应用场景 总结 Nginx实现动静分离 一、什么是动静分离 二、实现方案 三、配置Nginx动静分离 四、验证测试 反向代理如何配置 1、反向代理实例一 实…

视频怎么压缩变小?推荐三个压缩方法

视频怎么压缩变小&#xff1f;在数字时代&#xff0c;视频已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着视频质量的提升&#xff0c;视频文件的大小也随之增加&#xff0c;这给存储和分享带来了不小的挑战。幸运的是&#xff0c;市面上有许多视频压缩软件…

2024首发!会声会影2024旗舰版,专业编辑新体验!

会声会影2024最新旗舰版是一款专业的视频编辑软件&#xff0c;它集成了多种高级功能&#xff0c;为用户带来极致的视频编辑体验。在这篇文章中&#xff0c;我们将详细介绍该软件的功能和特色&#xff0c;帮助用户更好地了解和使用它。 会声会影全版本绿色安装包获取链接&#…

【简单理解化】 内存函数及它的模拟实现

本文章谈论memcpy,memcmp,memmove,memset函数 目录 1.memcpy的使用和模拟实现 2.memmove的使用和模拟实现 3.memset的使用 4.memcmp函数的使用 1.memcpy的使用和模拟实现 该函数用于从源内存块复制指定数量的字节到目标内存块 1 void * memcpy ( void * destination, const voi…

【机器学习基础】Python编程01:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

C++ | Leetcode C++题解之第134题加油站

题目&#xff1a; 题解&#xff1a; class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n gas.size();int i 0;while (i < n) {int sumOfGas 0, sumOfCost 0;int cnt 0;while (cnt < n) {int j (i …

2.1.3 采用接口方式使用MyBatis

实战概述&#xff1a;使用MyBatis的接口方式进行数据库操作 环境准备 确保项目中已经集成了MyBatis框架。 创建用户映射器接口 在net.huawei.mybatis.mapper包中创建UserMapper接口。定义方法findById(int id)用于按编号查询用户。定义方法findAll()用于查询全部用户。定义方法…

嵌入式Linux系统中GPIO应用控制详解

大家好,今天主要和大家分享一下,如何在linux系统上,实现GPIO口的控制,其中GPIO在内核端基本操作如下。 第一:Linux系统中GPIO介绍 GPIO(General-Purpose IO Ports),即通用I0接口.GPIO的使用较为简单,主要分为输入和输出两种功能.GPIO主要用于实现一些简单设备的控制.…

3. 使用tcpdump抓取rdma数据包

系列文章 第1章 多机多卡运行nccl-tests 和channel获取第2章 多机多卡nccl-tests 对比分析第3章 使用tcpdump抓取rdma数据包 目录 系列文章一、准备工作1. 源码编译tcpdump2. 安装wireshark 二、Tcpdump抓包三、Wireshark分析 一、准备工作 1. 源码编译tcpdump 使用 tcpdump…

判断经纬度是否在某个城市内

一、从高德获取指定城市边界经纬度信息 通过apifox操作&#xff1a; 二、引入第三方jar包&#xff1a; maven地址&#xff1a;https://mvnrepository.com/ maven依赖&#xff1a; <dependency><groupId>org.locationtech.jts</groupId><artifactId>…

Xcode中给UIView在xib中添加可视化的属性

给UIView在xib中添加可视化的属性 效果如下图&#xff1a; 可以直接设置view 的 borderColor 、borderWidth、cornerRadius&#xff0c;也可以单独指定view的某个角是圆角。减少了代码中的属性。 完整代码&#xff1a; UIViewBorder.h #import <UIKit/UIKit.h>inter…

NLP(1)-TF-IDF算法介绍

一、TF-IDF算法介绍 TF-IDF&#xff08;term frequency–inverse document frequency&#xff0c;词频-逆向文件频率&#xff09;是一种用于信息检索&#xff08;information retrieval&#xff09;与文本挖掘&#xff08;text mining&#xff09;的常用加权技术。 TF-IDF是一…

(十六)统计学基础练习题十(选择题T451-478)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学三&#xff09;。序号之前的题请看往期文章。 451&#xff09; 452&#xff09; 453&#xff09; 4…

Ubuntu安装cuda

文章目录 前言一、安装NVIDIA驱动1.1 过程中的问题1.2 解决方法1.3 重启后出现 perform MOK management 二、安装Cuda2.1 检查是否安装显卡驱动2.2 安装Cuda2.3 验证CUDA是否安装成功 三、配置环境变量---未完2.4 图片居中加调整大学 总结 #pic_center 前言 只是为方便学习&…