SpringBoot
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
引导类
parent
starter
内嵌了 tomcat 服务器
把 tomcat 服务器当成一个 java 对象来运行。所以不需要将代发放到 tomcat 容器当中去。
修改配置
SpringBoot 的配置文件默认放在了 application.properties 里面。只需要在里面直接通过键值对配置对应的属性即可
修改配置信息名 = 值
以后所有的配置都只写在这个 application.properties
可以通过 logging.level. [packagetPath] = [LoggingLevel] 来对特定的包进行日志输出。
注意 配置是根据你所导入的依赖使用的技术来决定的。如果没有对应的技术或依赖,配置是没有用的。
如果想要了解 springboot 有什么配置,可以点击直达【Common Application Properties (spring.io)】
springBoot 配置有三种格式
-
properties
-
通过键值对的方式来修改配置
-
-
yml
- 通过YAML格式
来修改配置。需要注意,在配置和配置名之间有一个空格
- 通过YAML格式
-
yaml
- 通过YAML格式
配置方式和 yam 一样。需要注意,在配置和配置名之间有一个空格
- 通过YAML格式
【注意 YAML 语法规则】
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tb键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
在企业中常用 【yam】的配置格式。
当三个格式的配置文件共存的时候,调用的优先级排序是 properties > yml > yaml 。里面的配置信息会相互叠加,如果相同的配置则按照优先级覆盖。优先级低的被优先级高的覆盖
如果配置文件无法识别
YAML 读取单个数据
读取 YAML 单一属性值
我们在 yml 中创建一个属性并赋予属性值然后通过 value 注解指向 yml 中的属性名即可。
【注意】value 的格式不像是spring的时候那么简单,需要加上一个 EL 表达式,即 ${ }
读取 YAML 中的对象的属性值
和读取单一属性值类似,只需要在属性名前指明对象名即可
【注意】我们在配置文件创建对象并给属性赋值,只需要在对象层的下一层即可直接创建属性。在 value 的 EL 表达式中,要指向准确的 对象名。
如果出现了错误,请先去检查你的 yml/yaml 文件中的格式是否正确
读取 YAML 中数组的数据
在 yml 中用 - value 来作为一个数据。在 value 的 EL 表达式中,我们通过 数组名[下标] 来指向。
读取 YAML 中对象数组中的属性的值
先指向下标再指向属性
YAML 数据读取规则
通过 @value 读取单个数据,属性名引用方式是 ${一级属性名 . 二级属性名 ........}
YAML 文件内的变量引用
在 YAML 文件中相互引用,只需要使用 ${引用对象} 就可以直接引用。就好像配置文件中一样。
YAML 文件中转义字符的使用
在 YAML 文件中是可以使用转移字符的,只需要用双引号字符串包括起来。效果就像黄框显示的那样。
封装全部 YAML 配置信息
使用 Environment 对象封装全部配置信息
使用 @Autowired 自动装载数据到 Environment 对象中。
封装指定的 YAML 配置信息
这是最常用也是最实用的方法
-
在 yaml 中创建对象,并写入数据
-
定义数据模型封装 yaml 文件中对应的数据(实体类)
数据模型的属性名一定要和yaml文件的属性名一致。它是用来接收配置信息的。
-
将数据模型注入 Spring 容器中(加上 @Component)
-
将数据模型指向 yaml 文件里的指定对象(加上 @ConfigurationProperties(prefix = "对象"))。以后先写 yaml 配置文件,再写对应的数据模型。
相同颜色框起来的部分,请确保他们的一致性。
整合第三方技术
junit
springboot 自动帮我们整合和 junit 的依赖。
默认的整合步骤
- 导入测试对应的 starter
- 测试类使用 @SpringBootTest 修饰
- 使用自动装配的形式添加要测试的对象。
【代码】
接口
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
-
超出
需要在测试类注解中指向引导类 @SpringBootTest(classes = 引导类.class)
-
-
如果出现错误显示找不到 @SpringBootConfiguration 这个注解,就意味着找不到引导类。
@SpringBootConfiguration 是被引导类的 @SpringBootApplication 给包含了。我们可以点进去 @SpringBootApplication 就可以找到。