高级特性
Profiles
1、隔离应用程序配置部分,并使其仅在特定环境中可用
2、任何 @Component 或 @Configuration 都可以用 @Profile 标记以限制何时加载
3、默认配置文件 application.yaml,任何时候都会加载
4、指定环境配置文件 application-{env}.yaml
5、激活指定环境
(1)配置文件激活
spring:
profiles:
active:
- dev
- hsqldb
(2)命令行激活:java -jar xxx.jar --spring.profiles.active=dev,hsqldb
(3)优先级:配置文件 < 命令行
(4)默认配置与环境配置同时生效,存在同名配置项,以 profile 配置优先
6、叠加激活新的 profile
spring:
profiles:
include:
- dev1
- dev2
7、Spring Boot 在未指定 Profile 时默认为 default
8、分组
(1)properties
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
(2)yaml
spring:
profiles:
group:
production:
- proddb
- prodmq
(3)配置文件激活
spring:
profiles:
active: production
(4)注解激活(按条件装配)
@Profile("production")
外部化配置
1、常用外部配置源:Java properties 文件、YAML 文件、环境变量、命令行参数
2、配置参数优先级:顺序提高(若存在同名配置项,高优先级覆盖低优先级)
(1)默认属性(通过设置 SpringApplication.setDefaultProperties 指定)
(2)在 @Configuration 类上的 @PropertySource 注解。请注意,这样的属性源直到应用上下文被刷新时才会被添加到环境中。这对于配置某些属性来说已经太晚了,比如:logging.* 和 spring.main.*,这些属性在刷新开始前就已经被读取了
(3)配置数据(如 application.properties 文件)
(4)一个 RandomValuePropertySource,它的属性只在 random.*
(5)操作系统环境变量
(6)Java 系统属性,System.getProperties()
(7)来自 java:comp/env 的 JNDI 属性
(8)ServletContext 初始参数
(9)ServletConfig 初始参数
(10)来自 SPRING_APPLICATION_JSON(嵌入环境变量,或系统属性的内联 JSON)的属性
(11)命令行参数
(12)测试上的属性,在 @SpringBootTest 和测试注解上可用,用于测试应用程序的一个特定片断
(13)在测试上的 @TestPropertySource 注解
(14)当 devtools 激活时,$HOME/.config/spring-boot 目录下的 Devtools 全局设置属性
3、配置文件查找位置(优先级顺序提高)
(1)classpath 根路径
(2)classpath 根路径下 config 目录
(3)jar 包当前目录
(4)jar 包当前目录的 config 目录
(5)/config 子目录的直接子目录
4、配置文件加载顺序
(1)当前 jar 包内部的 application.properties 和 application.yml
(2)当前 jar 包内部的 application-{profile}.properties 和 application-{profile}.yml
(3)引用 jar 包外部的application.properties和application.yml
(4)引用 jar 包外部的 application-{profile}.properties 和 application-{profile}.yml
自定义 starter
1、starter:只声明依赖,引入 autoconfigure 包
2、autoconfigure 包中配置使用 META-INF/spring.factories 中 EnableAutoConfiguration 的值,使得项目启动加载指定的自动配置类
3、AutoConfiger 自动配置类:@Configuration
(1)绑定配置文件类:@EnableConfigurationProperties
(2)按条件装配
(3)注入组件:@Bean
4、Properties 配置文件类:@ConfigurationProperties
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战