SpringBoot区分环境dev test prod

在SpringBoot项目中,由于开发和生产环境的数据库配置不同,通常需要在启动时选择合适的数据库。SpringBoot通过命名约定如application-{profile}

前言

很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这个时候我们要怎么配置项目启动时使用不同的数据库呢???

spring boot 提供

springboot底层已经帮我们设置好了!!!
springboot允许通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properties通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,springboot默认会启动application-default.properties。

可能你刚新建springboot项目,resource目录都没有,你也找不到任何一个配置文件,更别说找到application-default.properties或者application-default.yml文件了!!!
千万别纠结,这个默认配置文件是怎么来的
因为springboot底层或者说springboot内部已经给我们处理好了,内部就是有一个默认的配置文件。

这里的xxx.propertiesxxx.yml是一样的,这里我们就不讨论这两个后缀不同的文件区别了!

在这里插入图片描述

### 如何在 Spring Boot配置区分不同环境 #### 使用 Profiles 实现多环境配置 为了支持多个运行环境,在 `src/main/resources` 下创建针对各个环境配置文件,如 `application-dev.properties` 或者 `application-test.yml` 等。当应用程序启动时,可以通过激活特定 profile 来加载对应的配置文件[^1]。 对于 Java 命令行工具而言,可以在执行 jar 文件的时候传递参数来设定活动 profiles: ```bash java -jar myapp.jar --spring.profiles.active=test,prod ``` 这会依次尝试加载名为 `application-test.properties` 和 `application-prod.properties` 的资源文件并将其属性应用于上下文中[^5]。 另外一种方法是在主配置文件内直接声明要使用的 profile: ```yaml spring: profiles: active: dev ``` 这样做的好处是可以简化部署流程中的操作步骤;然而缺点在于如果源码库被公开,则敏感信息可能会暴露给未经授权的人士查看[^2]。 #### 多环境下的项目结构设计 合理的目录布局有助于更好地管理和维护跨平台的应用程序版本。推荐的做法是按照如下模式组织代码仓库内的文件夹路径: - `/config`: 存放共享于所有环境之间的通用设置项; - `/profiles/dev`, `/profiles/test`, `/profiles/prod`: 各自保存对应阶段特有的个性化调整选项。 这种安排不仅便于团队成员理解整个项目的构成关系,而且有利于 CI/CD 流水线自动化处理打包发布任务。 #### 配置优先级机制解析 Spring Boot 内部有一套严格的顺序规则用于决定哪些地方定义的数据应该覆盖其他位置相同键名所指向的内容。具体来说就是从低到高排列如下几类来源渠道的重要性等级(越往后权重越高): 1. 默认值 (Default Properties) 2. @ConfigurationProperties 注解标注过的 Bean 属性 3. 来源于命令行参数 (`--name=value`) 4. JVM 系统属性 (`System.getProperties()`) 5. 操作系统环境变量 6. RandomValuePropertySource 类型随机数生成器产生的唯一标识符 7. 所有已知 Profile-specific 配置文件里的条目 8. 主 application.properties/yml 文档本身 9. 用户家目录下 .springboot-env.conf 文件里记录的信息 10. 当前工作空间根节点处存在的 SPRING_APPLICATION_JSON 字符串形式 JSON 对象表达式 11. Test 上下文专属范围内的 PropertySourcesPlaceholderConfigurer 组件实例化对象 12. Devtools GlobalSettings 特殊类别下的全局性开关控制指令集 因此建议开发者们充分考虑上述因素的影响,在适当的位置放置合适的配置数据以满足实际业务逻辑的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值