SpringBoot:配置修改、yam/yaml配置文件、yam/yaml 的数据读取、整合 JUnit

726 阅读4分钟

SpringBoot

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

引导类

image-20220420223639897


parent

image-20220420223855421


starter

image-20220420224022717


内嵌了 tomcat 服务器

把 tomcat 服务器当成一个 java 对象来运行。所以不需要将代发放到 tomcat 容器当中去。


修改配置

SpringBoot 的配置文件默认放在了 application.properties 里面。只需要在里面直接通过键值对配置对应的属性即可

修改配置信息名 = 值

以后所有的配置都只写在这个 application.properties

image-20220420231102124

image-20220421171840389

可以通过 logging.level. [packagetPath] = [LoggingLevel] 来对特定的包进行日志输出。

注意 配置是根据你所导入的依赖使用的技术来决定的。如果没有对应的技术或依赖,配置是没有用的。

如果想要了解 springboot 有什么配置,可以点击直达【Common Application Properties (spring.io)


springBoot 配置有三种格式

  1. properties

    • 通过键值对的方式来修改配置image-20220421173245312

  2. yml

    • 通过YAML格式image-20220421173452094来修改配置。需要注意,在配置和配置名之间有一个空格
  3. yaml

    • 通过YAML格式image-20220421173513558配置方式和 yam 一样。需要注意,在配置和配置名之间有一个空格

【注意 YAML 语法规则】

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tb键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释

在企业中常用 【yam】的配置格式。

当三个格式的配置文件共存的时候,调用的优先级排序是 properties > yml > yaml 。里面的配置信息会相互叠加,如果相同的配置则按照优先级覆盖。优先级低的被优先级高的覆盖

如果配置文件无法识别

image-20220421175058510


YAML 读取单个数据

读取 YAML 单一属性值

我们在 yml 中创建一个属性并赋予属性值然后通过 value 注解指向 yml 中的属性名即可。

image-20220421184716975

【注意】value 的格式不像是spring的时候那么简单,需要加上一个 EL 表达式,即 ${ }


读取 YAML 中的对象的属性值

和读取单一属性值类似,只需要在属性名前指明对象名即可

image-20220421185216740

【注意】我们在配置文件创建对象并给属性赋值,只需要在对象层的下一层即可直接创建属性。在 value 的 EL 表达式中,要指向准确的 对象名。

如果出现了错误,请先去检查你的 yml/yaml 文件中的格式是否正确


读取 YAML 中数组的数据

在 yml 中用 - value 来作为一个数据。在 value 的 EL 表达式中,我们通过 数组名[下标] 来指向。

image-20220421190204150


读取 YAML 中对象数组中的属性的值

先指向下标再指向属性

image-20220421190753005


YAML 数据读取规则

通过 @value 读取单个数据,属性名引用方式是 ${一级属性名 . 二级属性名 ........}


YAML 文件内的变量引用

在 YAML 文件中相互引用,只需要使用 ${引用对象} 就可以直接引用。就好像配置文件中一样。

image-20220421191817206


YAML 文件中转义字符的使用

在 YAML 文件中是可以使用转移字符的,只需要用双引号字符串包括起来。效果就像黄框显示的那样。

image-20220421192556672

封装全部 YAML 配置信息

使用 Environment 对象封装全部配置信息

使用 @Autowired 自动装载数据到 Environment 对象中。

image-20220421225451083

封装指定的 YAML 配置信息

这是最常用也是最实用的方法

  1. 在 yaml 中创建对象,并写入数据

  2. 定义数据模型封装 yaml 文件中对应的数据(实体类)

    数据模型的属性名一定要和yaml文件的属性名一致。它是用来接收配置信息的。

  3. 将数据模型注入 Spring 容器中(加上 @Component)

  4. 将数据模型指向 yaml 文件里的指定对象(加上 @ConfigurationProperties(prefix = "对象"))。以后先写 yaml 配置文件,再写对应的数据模型。

相同颜色框起来的部分,请确保他们的一致性。

image-20220421232318922

整合第三方技术

junit

springboot 自动帮我们整合和 junit 的依赖。

默认的整合步骤

  1. 导入测试对应的 starter
  2. 测试类使用 @SpringBootTest 修饰
  3. 使用自动装配的形式添加要测试的对象。

【代码】

接口

package com.hyz.Mapper;

/**
 * @author workplace
 * @date 2022/4/21 23:32
 */
public interface BookMapper {
    /**
     * 测试方法
     */
    void save();
}

实现类

package com.hyz.Mapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

/**
 * @author workplace
 * @date 2022/4/21 23:32
 */
@Repository
public class BookMapperImpl implements BookMapper{
    @Override
    public void save() {
        System.out.println("book is running ...");
    }
}

测试类

package com.hyz;

import com.hyz.Mapper.BookMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
class Springboot04JunitApplicationTests {

    @Autowired
    BookMapper bookMapper;

    @Test
    void contextLoads() {
        bookMapper.save();
    }
}

【注意】

  • @Autowired 只能作用于全部变量,不能作用于局部变量。

  • 测试类在引导类的包或子包下,如果超出了需要在测试类头上标注

    • 未超出 @SpringBootTest

      image-20220421235743812

    • 超出

      需要在测试类注解中指向引导类 @SpringBootTest(classes = 引导类.class)

      image-20220422000116244

  • 如果出现错误显示找不到 @SpringBootConfiguration 这个注解,就意味着找不到引导类。

    @SpringBootConfiguration 是被引导类的 @SpringBootApplication 给包含了。我们可以点进去 @SpringBootApplication 就可以找到。