外部环境配置
- 前言
- 1、配置优先级
- 配置文件优先级如下(后面的覆盖前面的)
- 测试
- 2、外部配置
- 3、导入配置
- 4、属性占位符
前言
场景:线上应用如何快速修改配置,并引用最新配置?
springBoot 使用配置优先级+外部配置 简化配置更新、配置运维
只需要给jar应用所在的文件夹放一个application.properties最新配置文件,重启项目就能自动应用最新配置
1、配置优先级
springBoot 允许将配置外部化,以便可以在不同环境中使用相同的应用程序代码
我们可以使用各种外部配置源,包括java Properties文件,yaml文件、环境变量和命令参数
@value可以获取值,也可以用@configurationProperties将所有属性帮i的那个到java object中
以下是springBoot属性源加载顺序,后面的会覆盖钱买你的值 由低到高 高优先级覆盖低优先级
1、默认属性(通过springApplication.setDefaultproperties指定的)
2、@propertysource指定加载的配置(需要卸载@Configuration类上才可生效)
3、配置文件(application.properties/yml等)
4、RandomValuePropertySource支持的random.*配置(如:@value(“$(random.int)”)
5、os环境变量|
6、java系统属性(system.getProperties())
7、JnD1属性(来自java:comp/env)
8、ServLetContext 初始化参数
9、ServletConfig初始化参数
10、SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性的JSON)
11、命令行参数
12、测试属性,(@SpringBootTest进行测试时指定的属性)
13、测试类@TestPropertySource注解
14、Devtools设置的全局属性($HOME/.config/spring-boot)
结论:配置可以写在很多位置,常见的优先级顺序:
命令行>配置文件>springappliation配置
配置文件优先级如下(后面的覆盖前面的)
- jar包内的application.properties/yml
- jar包内的application-{profile}.properties/yml
- jar包外的application.properties/yml
- jar包外的application-{profile}.properties/yml
建议:用一种格式的配置文件,如果。properties和.yml同时存在,则。properties优先
所有参数均可以由命令行传入,使用–参数项=参数值,将会被添加到环境变量中,并优先于配置文件,比如java -jar app.jar --name=“String”:, 可以使用@Value(“$(name)”)获取
测试
打包成jar包
在外部设置配置文件
2、外部配置
springBoot应用启动会自动寻找application.properties和application.yaml位置,惊醒加载,顺序如下:
1、类路径
类的跟路径、类下/config包
2、当前路径(项目所在位置)
当前路径、当前下/config子目录、/config目录的直接子目录
在外部闯进config目录权重高于外面的application.properties文件
3、导入配置
#导入指定的配置
#spring.config.import=classpath:/aaa.properties
#导入配置的优先级低于配置文件的优先级
#aaa=cccc
4、属性占位符
#属性占位符
haha=我的端口是:${server.port}
获取haha的值