关于 SpringBoot 配置文件,在之前的文章中已经提到 配置文件格式 ,主要是两种格式的配置,这里并没有哪个配置写法一定优于另一种写法,对于配置文件名(application.yml 或者 application.properties),可以更改,为了减少不必要的麻烦,不建议修改,本篇文章以 yml 文件作为示例
本篇文章示例代码见: springboot-config
YAML 是JSON的超集,因此是用于指定分层配置数据的便捷格式。只要在类路径上有SnakeYAML库,SpringApplication类就会自动支持YAML作为属性的替代 。
#
符号
1 |
env: dev |
1 |
# 这种写法,必须有两层结构,而且第二层(language 名字)是必须满足 Java 属性字段命名规则 |
1 |
# 对象 |
1 |
# 随机数 |
1 |
bootapp.name: SpringBoot |
:
号后面有一个
空格
为了在配置自定义属性时,向配置 SpringBoot 属性自动提示的功能,导入如下的包
1 |
<!--导入配置文件处理器,配置文件进行绑定就会有提示--> |
或者在 gradle 配置文件中添加依赖
1 |
compileOnly 'org.springframework.boot:spring-boot-configuration-processor' |
如果任然无法自动提示,请查看你的编辑器 IDEA 中是否开启了
Annonation Processing
Common application properties ,是 SpringBoot 官方提供的一些默认配置属性说明,如果需要更改,只需要在 application.yml 文件中重写该属性即可,比如重新设置服务的启动端口为 9090
1 |
server: |
自定义配置
首先在 application.yml 文件中根据上面所述的规则写法进行自定义字段的声明
1 |
myConfig: |
配置的使用
ConfigurationProperties
@ConfigurationProperties 注解是 SpringBoot提供的一种使用属性的注入方法,不仅可以方便的把配置文件中属性值与所注解类绑定,还支持松散绑定,JSR-303 数据校验等功能
1 |
/** |
Value
@Value 注解支持直接从配置文件中读取值,同时支持 SpEL 表达式,但是不支持复杂数据类型和数据验证
使用 @Value 获取配置文件中定义的值,通常其类是被 @Controller , @Service , @Component 等注解修饰,如果是一般普通的类(如一些工具类)并 不能 只接获取到配置文件中定义的值
1 |
|
PropertySource
@PropertySource 注解加载自定义配置文件,由于 @PropertySource 指定的文件会优先加载,所以如果在 applocation.properties 文件中存在相同的属性配置,会覆盖前者中对应的值,且 @PropertySource 不支持 yml 文件注入
多环境配置
在实际的开发中,不同环境对应不同的配置,因此我们需要根据环境来配置不同的项目配置信息,SpringBoot 也是支持我们进行多环境的配置,通常情况下,我们命名为
application-{profile}.properties/yml
,其中
{profile}
表示不同的环境,比如:dev(开发),prod(线上) 等
关于具体的多环境配置,可以参考文章 SpringBoot(五)多环境配置
配置文件加载顺序
Spring Boot 启动会扫描以下位置的配置文件(application.properties 或 application.yml) 作为Spring Boot 的默认配置文件
加载顺序可以查看下图
优先级从高到低,高优先级的配置会覆盖低优先级的配置