【SpringBoot】SpringBoot基础教程(3)
前言:
本文内容:了解主启动类怎么运行、yaml语法讲解、给属性赋值的几种方式
推荐免费SpringBoot基础教程视频:【狂神说Java】SpringBoot最新教程通俗易懂_哔哩哔哩_bilibili
了解主启动类怎么运行
Run
本以为就是运行了一个main方法,没想到却是开启了一个服务
1 | package com.jokerdig; |
SpringApplication.run分析
- SpringApplication的实例化
- run方法的执行
SpringApplication
主要做以下四件事:
- 推断应用的类型是普通的项目还是Web项目
- 查找并加载所有可用初始化器,设置到
iniltializers
属性中 - 找出所有的应用程序监听器,设置到
listeners
属性中 - 推断并设置
main
方法的定义类,找到运行的主类
查看构造器
1 | this.resourceLoader = resourceLoader; |
run方法
yaml语法讲解
配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的
-
application.properties
语法结构:key=value
-
application.yml
语法结构:key: value(中间有空格哦)
配置文件作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都为我们自动配置好了。
YAML
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
配置的区别:
yaml配置
1 | server: |
xml配置
1 | <server> |
YAML语法
基本语法
1 | key: value |
以此来表示一堆键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
注意:属性和值的大小写都是十分敏感的
1 | server: |
值的写法
自变量: 普通的值[数字,布尔值,字符串]
1 | key: value |
自变量直接写在后面,字符串默认不用加双引号或者单引号;且双引号不会转义字符串里的特殊字符。
1 | # 例如: |
项目搭建
-
新建一个项目
springboot-02-config
如果你使用的是旧版IDEA,且Maven使用了国内镜像,那么在
spring-boot-starter-parent
版本爆红的时候修改版本为2.3.0.RELEASE
即可。 -
找到
application.properties
1
2
3
4
5# springboot的这个配置文件中可以配置哪些内容呢
# 1. 可以使用官方配置
# 地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#appendix
# 官方全部配置过于繁琐 -
第二种方法,删除
application.properties
新建一个application.yaml
练习基本语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# key: value
name: Jokerdig
# 存储对象
student:
name: Jokerdig
age: 21
# 行内写法
student1: {name: Jokerdig,age: 21}
# 数组
pets:
- cat
- dog
- pig
# 行内写法
pets1: [cat,dog,pig]
给属性赋值的几种方式
yaml可以直接给实体类赋值
-
新建
pojo
包,在包下新建实体类Person.java
和Dog.java
这里我们引入lombok
Person.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28package com.jokerdig.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author Joker大雄
* @data 2022/7/13 - 11:29
**/
public class Person {
private String name;
private Integer age;
private boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}Dog.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package com.jokerdig.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
/**
* @author Joker大雄
* @data 2022/7/13 - 11:26
**/
public class Dog {
private String name;
private Integer age;
} -
通过
yaml
对实体类进行赋值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27person:
name: JokerDaxiong
age: 21
happy: true
birth: 2000/1/1
maps: {key1,key2,key3}
lists:
- Java
- JavaScript
- SpringBoot
dog:
name: 呆呆
age: 5
3. 通过注解绑定到实体类
> 当我们配置`@ConfigurationProperties`注解的时候IDEA上方会有爆红提示,点击Open Documentation进行配置即可(注意:这个爆红并不影响程序运行)
>
> 在pom.xml添加该依赖即可
>
> ```xml
> <!-- @ConfigurationProperties 爆红解决-->
> <dependency>
> <groupId>org.springframework.boot</groupId>
> <artifactId>spring-boot-configuration-processor</artifactId>
> <optional>true</optional>
> </dependency>Perosn.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30package com.jokerdig.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author Joker大雄
* @data 2022/7/13 - 11:29
**/
public class Person {
private String name;
private Integer age;
private boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}Dog.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.jokerdig.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author Joker大雄
* @data 2022/7/13 - 11:26
**/
public class Dog {
private String name;
private Integer age;
} -
在测试类进行测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package com.jokerdig;
import com.jokerdig.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
class Springboot02ConfigApplicationTests {
private Person person;
void contextLoads() {
System.out.println(person);
}
} -
输出结果
1
2
3
4
5
6
7
8
9
10
11Person(
name=JokerDaxiong,
age=21, happy=true,
birth=Sat Jan 01 00:00:00 CST 2000,
maps={key3=, key1=, key2=},
lists=[Java, JavaScript, SpringBoot],
dog=Dog(
name=呆呆,
age=5
)
) -
使用
properties
和yaml
为赋值的区别@ConfigurationProperties (yaml) @Value (properties) 功能 批量注入配置文件中的属性 单个指定 松散绑定(语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 不支持 复杂类型封装 支持 不支持
SpringBoot官方推荐我们使用yaml,如果你需要使用properties来写,首先一定要确定properties的编码为UTF-8