springboot3环境隔离

Profiles

环境隔离能力;快速切换开发、测试、生产环境

步骤:

  1. 标识环境:指定哪些组件、配置在哪个环境生效{dev 开发环境 test 测试环境 prod 生产环境 defult 默认环境 }
  2. 切换环境:这个环境对应的所有组件和配置就应该生效 只有激活对应的环境,这些组件才会生效

1. 使用

1.1 指定环境

  • Spring Profiles 提供一种隔离配置 的方式,使其仅在特定环境生效;
  • 任何@Component, @Configuration 或 @ConfigurationProperties 可以使用 @Profile 标记,来指定何时被加载。【容器中的组件 都可以被 @Profile标记】

1.2 环境激活

  1. 配置激活指定环境; 配置文件
ini 复制代码
spring.profiles.active=production,hsqldb
  1. 也可以使用命令行激活。--spring.profiles.active=dev,hsqldb
  2. 还可以配置默认环境; 不标注@Profile 的组件永远都存在。
    1. 以前默认环境叫default
    2. spring.profiles.default=test 不推荐通过修改默认环境的方式来切换环境
  3. 推荐使用激活方式激活指定环境
  4. 也可以使用命令行激活。--spring.profiles.active=dev,hsqldb
  5. 还可以配置默认环境; 不标注@Profile 的组件永远都存在。
    1. 以前默认环境叫default
    2. spring.profiles.default=test

4.推荐使用激活方式激活指定环境

1.3 环境包含

注意:

  1. spring.profiles.active 和spring.profiles.default 只能用到 无 profile 的文件 中,如果在application-dev.yaml中编写就是无效的
  2. 也可以额外添加生效文件,而不是激活替换。比如:
ini 复制代码
spring.profiles.include[0]=common  #包含指定的环境,不管激活哪个环境
spring.profiles.include[1]=local

最佳实战:

  • 生效的环境 = 激活的环境/默认环境 + 包含的环境【总是要生效的环境】
  • 项目里面这么用
    • 基础的配置mybatis、log、xxx:写到包含环境中
    • 需要动态切换变化的 db、redis:写到激活的环境中

2.2 Profile 分组

创建prod组,指定包含db和mq配置

csharp 复制代码
spring.profiles.group.prod[0]=db
spring.profiles.group.prod[1]=mq #直接按组激活相应的环境 ,组内可以写环境配置也可以写其他的环境配置组

使用--spring.profiles.active=prod ,就会激活prod,db,mq配置文件

2.3. Profile 配置文件

  • application-{profile}.properties可以作为指定环境的配置文件。
  • 激活这个环境,配置 就会生效。最终生效的所有配置是
    • application.properties:主配置文件,任意时候都生效
    • application-{profile}.properties:指定环境配置文件,激活指定环境生效

profile优先级 > application

项目的所有生效配置项 = 激活环境配置中的所有项 + 主配置文件中的与环境配置文件不冲突的项

相关推荐
露天赏雪9 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
蜗牛87516 小时前
为 Spring Boot 团队做一个 Elasticsearch 查询工作台:六种模式、语义补全与浏览器直连
spring boot
养军博客18 小时前
Spring Boot 3.x + Spring Security 6.x 整合 JWT 实战:jjwt 与 java-jwt 两种工具库详解
java·spring boot·springsecurity
txxzjmzlh1 天前
SpringBoot 统⼀功能处理
java·spring boot·后端
秋天的怀念_David2 天前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
余槐i2 天前
MySQL 8.0 联合索引走错:为什么加了索引查询反而从 200ms 变成 8s
java·spring boot·mysql·docker·性能优化
nice_lcj5202 天前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
AI源码2 天前
旅游推荐管理系统
spring boot
aiks_yuan3 天前
Spring Boot SSE 流式输出变成一次性返回怎么办:大模型打字机效果失效的 5 个原因(Spring Boot 4.1.2 实测)
spring boot
Thomas.Sir3 天前
第15课:SpringBoot连接池详解:HikariCP配置、调优、监控,4.x连接池新特性
java·spring boot