• springboot3 一些听课笔记(1)



    一、日志框架

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

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

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

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-loggingartifactId>
            exclusion>
        exclusions>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-log4j2artifactId>
    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.dataformatgroupId>
                <artifactId>jackson-dataformat-xmlartifactId>
            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.dataformatgroupId>
                <artifactId>jackson-dataformat-yamlartifactId>
            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());
                }
            };
    }}
    
    

    成功!

  • 相关阅读:
    IO作业:提取文件属性
    C++ 类的声明笔记
    stata做莫兰指数,结果不显示是怎么回事,求解答
    Vue中动态绑定属性
    java计算机毕业设计高校贫困生信息管理系统源码+mysql数据库+系统+lw文档+部署
    输入一个日期,包括年、月和日,计算该日期是这一年的第几天
    sql server导入表格出现错误
    【GRNN回归预测】基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测【含Matlab源码 2132期】
    网站首页颜色变灰色
    pip安装提示socket.timeout: The read operation timed out【已解决】
  • 原文地址:https://blog.csdn.net/qq_45906101/article/details/139405054