一、Spring Boot 的全局配置文件(application.properties、application.yml)
1.这两种配置文件是SpringBoot 支持的对默认配置修改的格式。命名和格式是一样的,不能随意改名。我们来分别说一下这两种格式的配置文件对SpringBoot配置及区别。
这两个配置文件的作用:SpringBoot在底层已经帮我们默认配置好,我们可以通过配置文件来修改默认的配置,如对Tomcat的端口配置等等。
2.首先来说一下的是application.properties这个文件。(我们来修改tomcat端口)
2.1启动主程序,这是tomcat控制台打印的信息
2.2修改成功
3.对于application.yml这个文件而言,修改tomcat端口。(注释掉application.properties的端口配置)
3.1在application.properties同一个路径下新增一个"application.yml",如下图。
添加修改tomcat代码。
运行效果
访问效果(还是一样的效果)
这两种简单的配置比较,application.yml比较简洁、配置简单。推荐使用。以下着重介绍application.yml语法。
二、yaml 语法(大小写敏感)
1.yaml语法的精髓在与对空格的使用,可谓使用得淋漓尽致。
yaml语法主要是K:(冒号后面是空格) V值的形式(注意空格的使用)
空格的另一个重要的使用时对配置文件的层级关系的控制,如:
server:
port: 8090
address: /hello -->这:后都有空格,空格也控制层级关系
2.yaml对不同类型的值的操作:(只要记得 空格是神奇的存在)
对于(数值、字符串、和布尔)对于配置的值是字符串,不用双引号和单引号,直接写就可以了,若使用双引号的话会将特殊字符转义,使用单引号则会原样输出,不会对
特殊字符转义
例如:name: "小二 过来"-------------------->会这样输出 小二 换行 过来
name: '小二 过来'--------------------->会这样输出 小二 过来(没有变化)
对于K : V形式(对象、Map)键值对类型
方法一、对象和Map占一行,属性和值会在另一行
Person:
name: lcaiqin
age: 23
方法二、将所用配置写在一行里面
Person: {name: lcaiqin,age: 23}
//--->>注意空格的使用
对于数组(List,Set)
方法一、使用- value的形式。如:注意是- 空格 值
Pets:
- dog
- cat
- pig
方法二、使用一行解决。注意是:冒号 空格
Pets: [cat,dog,pig]
三、yaml配置文件的值注入
在实体类中编写如下代码:
@Component //@ConfigurationProperties在Spring容器中运行需要组件的支持
@ConfigurationProperties(prefix = "person") //告诉SpringBoot的所有属性和配置文件映射起来。prefix = "person"指从配置文件的什么位置映射
public class Person {
//基本类型
private String name;
private Integer age;
private Boolean Boos;
//对象
private Cart cart;
private Map<String,Object> map;
//数组
private List<Object> list;
写法一、在application.yml中输入如下代码。
person:
name: 独而不孤
age: 23
Boos: true
cart:
name: 奥迪
color: 白色
map:
k1: v1
k2: v2
list:
- apple
- pear
- eat
写法二、在application.yml中输入如下代码。(一行元素搞定)
person:
name: 独而不孤
age: 23
cart: {name: 奥迪,color: 白色}
list: [apple,pear,eat]
map: {k1: v1,k2: v2}
Boos:true
四、application.properits配置文件注入
bean中代码:
//基本类型
@Value("${person.name}") //使用el表达式,从配置文件中取出
private String name;
@Value("${person.age}")
private Integer age;
private Boolean Boos;
application.propeerties代码:
person.age=23
person.boos=true
person.cart.name=奥迪
person.cart.color=白色
person.name=独而不孤
person.map.k1=值1
person.map.k2=值2
person.list.list1=apple
运行效果:乱码
解决乱码:"File">>"Settings">>"Editor">>"File Encodings"
这样就可以了。
五、@Value和@ConfigurationProperties的比较(@ConfigurationPropertis要配合@Component)
@ConfigurationPropertis |
@Value |
|
功能上 |
对所有的属性进行注入值 |
一个一个注入值 |
语法复杂程度 |
简单(可以一行一个一元素) |
元素冗余 |
SpEL |
不支持 |
支持 |
JSR303数据校验 |
支持 |
不支持 |
复杂类型封装 |
支持 |
不支持 |
个人觉得(除了需要对个别的属性赋值之外)都建议使用@ConfigurationProperties
1.对JSR303数据校验
@Component
@ConfigurationProperties(prefix = "person")
@Validated -->加入此标签
public class Person {
//基本类型
@Email
private String name;
private Integer age;
private Boolean Boos;
运行效果