springboot3 一些听课笔记(1)

作者 : admin 本文共4819个字,预计阅读时间需要13分钟 发布时间: 2024-06-5 共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>

<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有各种启动器,如果我们配置了启动器,就会从
springboot3 一些听课笔记(1)插图
springboot3 一些听课笔记(1)插图(1)
这里边也就是
springboot3 一些听课笔记(1)插图(2)
这里找到我们要自动配置的组件。
每个自动配置类其实都会有一些属性绑定,为了给组件添加属性,比如serve-port默认是8080.
通过
springboot3 一些听课笔记(1)插图(3)
可以找到属性的类,springboot3 一些听课笔记(1)插图(4)
属性的类有前缀,证明我们可以在properties文件中通过该前缀来修改属性的值。

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

三 、springweb

3.1

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

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

springboot3 一些听课笔记(1)插图(8)
自动配置类中有一个这个类,主要是它会把所有的Webconfigure添加进去。把方法加进去。其实底层还是调用WebMvcConfigurer 的相应方法。springboot3 一些听课笔记(1)插图(9)

3.2 自己编写一个messageconvert

中间媒介默认是支持json的
springboot3 一些听课笔记(1)插图(10)
我们可以导入xml依赖,则也可以支持xml格式

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

可以在我们要输出的类前加上该注解,但我试了不加该注解,也可以生效springboot3 一些听课笔记(1)插图(11)
我们可以通过请求头的Accept来告知服务器我们想要的类型,这是默认可以的。
但是如果我们想要通过url请求参数来告知,就需要进行配置
springboot3 一些听课笔记(1)插图(12)
springboot3 一些听课笔记(1)插图(13)
默认是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; //把对象转成yaml
public 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 {
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
@Override //配置一个能把对象转为yaml的messageConverter
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyyamlHttpMessageConvet());
}
};
}}

成功!

springboot3 一些听课笔记(1)插图(14)

本站无任何商业行为
个人在线分享 » springboot3 一些听课笔记(1)
E-->