正经学徒,佛系记录,不搞事情
前言
一般情况下,会因操作的用户不同而给项目配置不同的环境,比如“开发环境”,“测试环境”,“线上环境”,本文基于springboot将项目划分为多个配置,通过不同的命令生效不同的配置文件
正文
创建一个普通的springboot项目,添加三个yml后缀的文件,目录如下
#application.yml
server:
port: 8088
spring:
profiles:
active: dev
#application-dev.yml 开发环境
system:
serverName: dev_project
#application-prod.yml 线上环境
system:
serverName: prod_project
- 文件命名的格式是固定的 application-{自定义}.yml
- application.yml文件的 spring.profiles.active=自定义 是指定项目启动默认加载哪个配置文件,现在的配置是dev
创建TestController.java,通过@Value获取属性值,启动项目测试
@RestController
public class TestController {
@Value("${system.serverName}")
private String serverName;
@GetMapping("/test")
public String test(){
return serverName;
}
}
由此可见,使用了application-dev.yml配置文件
线上环境时,可通过 spring.profiles.active=自定义 覆盖默认的配置
如何编译、部署项目参考:https://www.cnblogs.com/ityouknow/p/6834287.html?utm_source=itdadao&utm_medium=referral
现在通过 spring.profiles.active 的配置生效application-prod.yml配置文件
输入命令启动项目
java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
测试结果:
扩展
yml和properties后缀文件的功能是一样的,只是编码的格式不一样
但是有一个问题:yml和properties配置文件同时存在时会是什么效果?
如下,同时存在application-dev.properties和application-dev.yml文件,那当以dev配置启动项目时,哪个文件会生效
经过测试,这里直接提供最终的结果:
当application-dev.properties和application-dev.yml文件同时存在,则properties文件的内容将会覆盖yml对应属性的内容,这里有一个关键词要注意,是覆盖“对应属性”,而不是整个文件覆盖,说明properties和yml并存时,springboot将会把两个配置文件的内容合并起来,且重复的属性将会使用properties文件。包括springcloud的配置中心功能,配置文件存入github,当properties和yml并存时也是如此效果。