SpringBoot配置详解

简述

  springboot是基于约定的,所以很多配置都有默认的值,但如果想用自己的配置替换掉默认的配置的话,就可以使用application.properties或application.yml进行配置

 

YAML简介

 

  YAML是YAML Ain't Markup Language的缩写。YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互,可以被支持YAML库的不同的编程语言导入。YAML是以数据为核心的,比传统的xml方式更加简洁。

配置文件的加载顺序

yml和properties的区别

  properties文件和我们平常写的是一样的,就是键值对

  一般我们不在等号左右加空格,以免被识别成字符串的时候把空格包进去

server.port=8080

  而yml的写法略有不同,需要注意的是子属性有缩进,且值前面有空格

server:
    port: 8080

YAML基本语法

  大小写敏感

  数据值前边必须有空格,作为分隔符

  使用缩进表示关系

  缩进时不允许使用tab,只允许使用空格

  缩进的空格数不重要,只要相同层级的元素左对齐即可

  #表示注释,从#到行尾,都会被解析器忽略

查看配置

  当我们想修改某一配置但又不知道怎么写的时候,可以在idea里双击shift

  然后搜索spring-configuration-metadata.json文件,该文件描述了所有的配置书写的格式

 

 

   注意是这个autoconfigure文件

 

  像服务器启动的端口配置项,我们可以看到配置文件该如何书写

 

YML数据格式

读取配置文件内容

  一共有三种方式来读取我们的配置文件内容:

@Value注解  

  这也是spring框架支持的解析方式,我们可以在需要注入的变量的上方加value注解,注解值支持spel表达式,写上"${properties的键名}"即可获取到对应的值

Environment方式

  我们可以在类中定义一个Environment类型的变量,通过Autowired注解在spring容器初始化好这个变量。

  我们就可以用它的getProperty("properties的键名")方法获取到value值

  例如我们现在配置了端口

 

server:
  port: 8080

 

  然后我们就可以通过enviroment对象获取这个配置值

@RestController
public class ConfigController {

    private Environment env;

    @Autowired
    public ConfigController(Environment env) {
        this.env = env;
    }

    @GetMapping("/port")
    public Integer getPort(){
        return env.getProperty("server.port",Integer.class);
    }
}

 

ConfigurationProperties注解

  我们在实体类上方使用ConfigurationProperties注解,意思就是这个类和配置文件相映射

  注解的值就是配置文件里的父级键名,我们写person就意味这要在配置文件里找person前缀的值,并把值注入person对象

  当spring将person类加入核心容器时就会自动将配置文件里的值进行注入

为不同环境配置不同配置文件

  开发、测试、生产环境所用的配置文件不同,启动的时候可以通过idea或者命令行参数指定不同配置文件

  最常用的是使用单一配置文件,用"---"将文件分割成不同区域用于不同环境的配置

  每一个区域指定一个生产环境名

 

spring:
  config:
    activate:
      on-profile: dev

server:
  port: 8080

---
spring:
  config:
    activate:
      on-profile: qa

server:
  port: 8081

---
spring:
  config:
    activate:
      on-profile: online

server:
  port: 8082

 

  像这里我们为三个不同环境指定了不同的端口号

  在idea启动的时候我们可以配置profiles的参数指定不同的环境

 

 

 

 

 

 

 

 

 

posted @ 2021-07-20 10:12  艾尔夏尔-Layton  阅读(782)  评论(0编辑  收藏  举报