springboot配置文件
spring boot虽然简化了我们的开发,使我们不需要编写那些配置文件,但是也不是完全不用编写,其中的pom.xml(gradle构建为build.gradle)文件可以自动生成,但是spring boot启动时的application.yml(application.properties)文件还是需要开发人员手动编写的。
在以前的开发中,已经熟悉application.properties的书写方式,所以这里重点介绍yml
YAML
YAML是"YAML Ain’t a Markup Language"(YAML不是一种置标语言)的递归缩写。
在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种置标语言)(百度百科解释,一脸懵。。。)
总之,这种语言以数据为中心,巧妙避开各种如:引号、括号等,容易上手,比json、xml等更适合做配置文件。
基本语法
k:(空格)v: 键值对 (空格必须有)
他是以空格缩进来控制层级关系的,并且属性和值大小写敏感
server:
port: 8081
path: /hello
值的写法
普通值(字符串,数字,布尔)
K:V: 直接写;字符串默认不用加单引号或双引号
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
对象,map(键值对形式)
k: v:在下一行来写对象的属性和值的关系;注意缩进
person:
name: zhangsan
age: 20
也可以写在一行:
person:{name: zhangsan, age: 20}
数组(list,set)
用- 值表示数组中的一个元素
person:
- man
- woman
也可以写在一行:
person: [man,woman]
配置文件值的注入@ConfigurationProperties&@value
配置文件
person:
name: zhangsan
age: 18
boss: false
birth: 2019/03/26
maps: {k1: v1,k2: 12}
lists:
- car
- house
cat:
name: tom
age: 8
pojo:
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个key下面的所有属性进行一一映射
*
* Component只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String Name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Cat cat;
数据校验:
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
//name必须是邮箱格式
@Email
private String name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Cat cat;
@value 与在spring中的方式相同,不过多做解释。
@ConfigurationProperties 优势在于可以批量注入配置文件属性,支持数据校验以及复杂类型封装,二者没有绝对的好与坏,根据实际情况来进行选择。
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
加载指定的配置文件
我们如果将所有的配置数据都写在application.yml文件中,就会显得太过于臃肿,不利于维护,所以就要将这些数据抽取出来再与JavaBean进行映射。
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
*
* @PropertySource 值为对应文件的路径;
*/
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean boss;
多环境配置
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
yml支持多文档块方式:
server:
port: 8081
spring:
profiles:
active: prod #激活对应环境
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: prod #指定属于哪个环境
关于spring boot配置文件的内容,大体就这么多啦,这也是工作中常用到的,以后会继续补充。