springboot全局配置文件的使用 文件名称是固定的
application.properties: server.port=8888
application.yml
server:
port: 8888
在我们生成springboot项目时文件都已经配置好了;如果想要修改配置的话就可以在以上文件中进行修改
以前的配置文件大多数使用的是xxxx.xml文件;
YAML文件是以数据为中心的
YAML语法
基本语法
K:(空格)v: 表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据都是同一层级的
server:
port: 8888
path: /hello
属性和值也是大小写敏感;
值的写法
字面量:普通的值(数字、字符串、布尔)
k✌️字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里的特殊字符;特殊字符会作为本身想表示的意思
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据;
对象、Map(属性和值)(键值对);
k:v:在下一行来写对象的属性和值的关系;注意缩进;
对象还是k:v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
数组(List、Set)
用-表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
配置文件值注入
配置文件
server:
port: 8888
person:
lastName: zhansgan
age: 19
boss: false
brith: 2018/09/09
maps: {k1: v1,k2: 12}
list:
- list
- zhou
dog:
name: 小狗
age: 2
javaBean
package com.example.springhelloquick.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 降配置文件中的每一个属性值映射到 这个组件中
* @ConfigurationProperties: 告诉springBoot将本类中的所有属性和配置文件中相关的配置进行绑定
* prefix = "person" 配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能为容器提供的@ConfigurationProperties功能
*
* @date 2019/4/25 - 20:22
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date brith;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
使用@Component将该类注解为spring的管理类,也就是将一个java类注入到spring容器中,这样注入到spring中的其他类就可以使用该类了。详见附录。
使用@ConfigurationProperties(prefix=“person”)将application.yml中的属性注入到Config类中。其中prefix指定了application.yml中属性的前缀,也就是只有这部分指定的属性才会被注入。Config类的成员变量名与各个指定的application.properties属性名一一对应。
我们导入配置文件处理器 编写配置就有提示了
pom.xml文件中添加
org.springframework.boot
spring-boot-configuration-processor
true
数据测试
import com.example.springhelloquick.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringhelloquickApplicationTests {
@Autowired
Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
最终输出结果
Person{lastName=‘zhansgan’, age=19, boss=false, brith=Sun Sep 09 00:00:00 GMT+08:00 2018, maps={k1=v1, k2=12}, list=[list, zhou], dog=Dog{name=‘小狗’, age=2}}
application.properties
server.port=8888
#ideaʹ默认编码是utf-8 需要在idea的Setting的file encodings中设置配置文件自动转换编码格式才能统一
person.last-name=张三
person.age=12
person.boss=false
person.brith=2019/09/09
person.maps.k1=v1
person.maps.k2=13
person.list=a,c,s,
person.dog.name=dog
person.dog.age=1
@Value和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value |
---|---|
批量注入配置文件中的属性 | 一个个指定 |
支持松散语法绑定 | 不支持松散语法绑定 |
不支持SpELl 支持SpEL | |
支持JSR303数据校验 | 不支持 |
复杂类型数据的封装 | 不支持 |
配置文件不管是yml还是properties都能获取到值
如果我们只是在某个业务逻辑中需要获取一下配置文件中的某项值, 我们就是使用@value
如果专门编写一个Javabean来映射配置文件中的值我就使用@ConfigurationProperties
配置文件注入值数据校验
@Validated数据校验使用注解
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中 获取值/#{key}"></property>
* </bean>
* **/
//@Value("${person.last-name}")
@Email
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
private Date brith;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
========================未完 待续。。。。。