02-SpringBoot配置文件

一、配置文件

​ Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件。他们的作用都是修改Spring Boot自动配置的默认值。相对于properties文件而言,yml文件更年轻,也有很多的坑。可谓成也萧何败也萧何,yml通过空格来确定层级关系,使配置文件结构更清晰,但也会因为微不足道的空格而破坏了层级关系。

1.1、Properties配置文件

(1)、基本语法

#一行就是一个键值对(不推荐用空格隔开,虽然不会错)
key=value  

(2)、注意事项

  • 属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
  • 同行多个键值对当作一个键值对处理
  • properties配置文件在idea中默认utf-8可能会乱码

1.2、YAML配置文件

(1)、基本语法

key:(空格)value #表示一对键值对(空格必须有)

(2)、字面量(数字,字符串,布尔)

age: 10
name: "zhangsan \n" #双引号不转义字符串里面的特殊字符,即输出:张三 换行。反之单引号会发送转义
gender: true

(3)、对象、Map

​ 在下一行来写对象的属性和值的关系,对象还是k: v的方式

friends: 
  lastName: zhangsan
  age: 20
#行内写法
friends: {lastName: zhangsan,age: 18}

(4)、数组(List、Set)

pets:
 - cat
 - dog
 - pig
#行内写法
pets: [cat,dog,pig]

二、加载配置文件

2.1、默认配置文件位置

Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

优先级由高到底,且高优先级的配置会覆盖低优先级的配置;

使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

java -jar xxxx.jar --spring.config.location=G:/application.properties

2.2、ConfigurationProperties

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中某一属性下的所有属性进行一一映射
 *注意:
 *  需要这个组件是容器中的组件。
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

2.3、@PropertySource

/*
*@PropertySource(value = {"classpath:person.properties"}) 加载指定的配置文件。
*/
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
     @Email//配置文件注入值数据校验配置文件注入值数据校验
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
}

2.4、@ImportResource

​ 导入Spring的配置文件,让配置文件里面的内容生效

@ImportResource(locations = {"classpath:beans.xml"})

三、Profile

(1)、实际开发中我们需要为不同的环境做不同的配置。

方式一:

​ 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置;

方式二:

​ yml支持多文档块方式

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev

---
server:
  port: 8084
spring:
  profiles: prod  #指定属于哪个环境

(2)、激活指定profile

方式一:

#在主配置文件中指定其它配置
spring:
  profiles:
    active: prod

方式二:

java -jar xxx.jar --spring.profiles.active=dev;

方式三:

三个参数选其一即可:

  • VM options设置启动参数 -Dspring.profiles.active=prod
  • Program arguments设置 --spring.profiles.active=prod
  • Active Profile 设置 prod

四、外部配置加载顺序

​ SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

  • 命令行参数: java -jar xxxx.jar --server.port=8087 --server.context-path=/abc 多个配置用空格分开。

  • 来自java:comp/env的JNDI属性

2.来自java:comp/env的JNDI属性

  • Java系统属性(System.getProperties())

  • 操作系统环境变量

  • RandomValuePropertySource配置的random.*属性值

  • jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

由jar包外向jar包内进行寻找;

优先加载带profile

6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

  • jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

  • jar包外部的application.properties或application.yml(不带spring.profile)配置文件

8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

  • jar包内部的application.properties或application.yml(不带spring.profile)配置文件

  • @Configuration注解类上的@PropertySource

10.@Configuration注解类上的@PropertySource

  • 通过SpringApplication.setDefaultProperties指定的默认属性
posted @ 2020-06-16 17:28  ciyelc  阅读(156)  评论(0)    收藏  举报