SpringBoot yaml配置文件
创始人
2024-05-30 03:09:51
0

目录

      • yaml语法
      • 配置注入
        • @Value 注入简单类型
        • @ConfigurationProperties 注入相同前缀配置
        • Spring Configuration Processor 自定义配置项提示
        • 说明
      • 区分不同环境的配置
        • 一个配置文件,通过 spring.profiles 区分
        • 多个配置文件方式,通过文件名后缀区分

 

yaml语法

yml配置文件的特点:简洁,层级清晰、可读性强,可以配置多种数据类型

#数值型的值,long、float不要加L、F之类的后缀
id: 1 
#字符串类型的值,不引、单引、双引均可,如果值包含空格、冒号等yml预定义字符,则需要加引号
name: chy
#布尔类型
enable: false# 数组、list、set,以下3种写法均可,英文逗号后面带不带1个空格均可,-后面带1个空格
city1: beijing,shanghai,guangzhou,shenzhen
city2: [beijing,shanghai,guangzhou,shenzhen]
city3: - beijing- shanghai- guangzhou- shenzhen#对象、map,以下2种写法均可,放在{}中时key:后面也需要带一个空格
user1:id: 1  name: chy
user2: {id: 1, name: chy}#标准语法是冒号+缩进,当然,不使用缩进、直接点号分隔也行
user.id: 1  
user.name: chy#支持嵌套
user:id: 1name: chyteacher: zhangsan,lisi,wangwusocre: chinese: 90math: 100english: 80

可以使用框架、组件预定义的配置项,也可以自定义配置项

 

配置注入

@Value 注入简单类型

1、@Value可以用 ${ } 取配置文件中的值,也可以使用SpEL #{ }

@Value("#{2+3}")  // #{}
private int n;@Value("${server.port}")  // ${}
private String port;

${ }、#{ } 可以用于@Value注入,也可以用在模板引擎页面中取值

 

2、会自动转换为需要的类型注入

@Configuration  //需要标识为@Component体系的组件,@Value才会被扫描、解析
public class SysConfig {@Value("${id}")  //注入普通字段private int id;@Value("${user.name}")  //注入对象的属性值private String username;@Value("${city}")  //注入数组private String[] cityArr;@Value("${city}")  //注入listprivate List cityList;@Value("${city}")  //注入setprivate Set citySet;}

 

3、可以指定默认值,未在yml中配置时会自动使用默认值

@Value("${user.name}")  //未使用:指定默认值,如果yml中未配置对应的配置项,应用启动时会直接报错
private String username;@Value("${user.name:chy}")  //使用了:指定默认值,如果yml中未配置对应的配置项,会自动使用默认值
private String username;@Value("${user.name:Steve Jobs}")  //:后面不用加一个空格,字符、字符串类型的默认值,不管是否包含空格,都不用加引号。会自动把第一个:后面的内容作为默认值,如果:后面加了空格、引号,也会被当做默认值的一部分
private String username;@Value("${user.name:}")  //加了: 但未指定具体的默认值时,默认值会取对应数据类型的默认值,引用型 => null,String => 空串
private String username;@Value("${user.birthday:2020-01-01 00:00:00}")  //日期时间类型,直接注入Date容易出错,可以注入String类型的日期时间或Long型时间戳,提供个get方法手动转换为Date
private String birthday;

 

@ConfigurationProperties 注入相同前缀配置

会自动注入与成员变量名同名的配置项

@Data  //需要提供setter方法用于注入
@Configuration  //需要用@Component体系注解标注,放到容器中
@ConfigurationProperties("upload")  //指定配置项前缀,value、prefix属性互为别名,都可以指定配置项前缀
public class UploadConfig {private int maxFileSize;private String savaDir;//.....}

 

Spring Configuration Processor 自定义配置项提示

在创建springboot项目时,可以勾选 Developer Tools -> Spring Configuration Processor,或手动添加依赖

org.springframework.bootspring-boot-configuration-processortrue

这样先使用@ConfigurationProperties编写配置类,在properties、yml中写配置时,对应的配置项会有代码提示

 

说明

1、@Value、@ConfigurationProperties 都可以和springcloud的热更新注解 @RefreshScope 搭配使用,更新yml中对应的配置项时,自动刷新对应的java字段值。
 

2、@Value、@ConfigurationProperties 都只能注入到普通的实例成员上,不能注入到 final修饰的成员上,也不能直接注入到 static 修饰的成员变量上,但可以使用实例方法的方式间接注入到static成员变量上

@Configuration
public class UploadConfig {public static String saveDir;  //不能用final修饰,不然注入不了@Value("${upload.saveDir}")  //标注在实例方法上。方法不能用static修饰,否则注入不了public void setSaveDir(String saveDir) {UploadConfig.saveDir = saveDir;}//.....}

 

3、@Value、@ConfigurationProperties 都只能注入配置文件中的显式配置

eg. 在配置文件中显式配置了 server.port,才能注入 server.port;没在配置文件中显式配置 server.port,虽然springboot有这个配置项、也有默认值,但@Value、@ConfigurationProperties不会注入springboot自动配置指定的默认值。

 

区分不同环境的配置

一个配置文件,通过 spring.profiles 区分

独立成行的 - - - 用于分割配置,spring.profiles 指定当前配置段的名称

#各环境的公共配置
server:port: 9000#指定要使用的配置
spring:profiles:active: test#dev环境配置
---
spring:profiles: dev
#......#test环境配置
---
spring:profiles: test
#......

 

多个配置文件方式,通过文件名后缀区分

1、resources下新建配置文件,文件名格式为 application-xxx,示例

  • application-dev.yml:开发
  • application-test.yml:测试
  • application-prod.yml:生产
     

2、application.yml中指定要使用的配置文件

#各环境的公共配置spring:profiles:#指定要使用的配置文件,值是application-后面的部分,可以指定多个配置文件,有多个配置文件时逗号分隔active: dev

application.yml 中可以直接写各环境的公共配置,也可以把公共配置拆分到多个yaml中,然后在application.yml中通过 spring.profiles.include 引入。

active、include 都可以引入指定的配置文件,作用差不多,拆分为2个不同的配置项只是为了语义上的区分,好比html的布局标签

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...