SpringBoot - spring.profiles.active最佳实践

文章目录

  • Pre
  • 概述
  • 为什么需要多环境配置
  • 多环境配置实现步骤
    • 1. 配置文件准备
    • 2. 激活特定环境
      • 方法1:命令行参数
      • 方法2:环境变量
      • 方法3:IDE 配置
      • 方法4:全局配置文件默认设置
  • 3. 配置文件加载顺序
    • 配置生效的原理
  • 4. 常见问题
    • 多个配置文件冲突时怎么办
    • 忘记指定`spring.profiles.active`时会发生什么
    • 敏感信息如何管理
  • 5. 注意事项

在这里插入图片描述


Pre

SpringBoot - 多环境打包最佳实践


概述

在实际开发中,应用程序往往需要根据不同的环境(如开发环境、测试环境、生产环境等)加载不同的配置。Spring Boot 提供了一个强大的功能——多环境配置,通过spring.profiles.active指定当前应用运行的环境,简单又高效!

spring.profiles.active 是 Spring Boot 用来指定激活环境的核心配置属性。Spring Boot 会根据该属性的值动态加载对应的配置文件,决定应用程序运行时的行为。


为什么需要多环境配置

假设我们有一个Web应用,它在开发和生产环境中的配置差异可能包括:

  • 服务器端口:开发环境监听8080,生产环境监听80。
  • 数据库连接:开发环境使用本地数据库,生产环境使用远程数据库。
  • 日志级别:开发环境需要更详细的日志(DEBUG级别),生产环境只需要关键信息(INFO级别)。

通过多环境配置,我们可以将这些差异化配置分离,统一管理,并根据需求快速切换。


多环境配置实现步骤

1. 配置文件准备

Spring Boot 默认支持 application.ymlapplication.properties 文件来定义配置。我们可以为每个环境创建专属的配置文件,例如:

  • application-dev.yml:开发环境配置
  • application-test.yml:测试环境配置
  • application-prod.yml:生产环境配置

全局配置文件(application.yml

spring:profiles:active: dev # 默认激活开发环境

开发环境(application-dev.yml

server:port: 8080
app:name: "MyApp-Dev"
logging:level:root: DEBUG

生产环境(application-prod.yml

server:port: 80
app:name: "MyApp-Prod"
logging:level:root: INFO

2. 激活特定环境

可以通过以下几种方式激活特定的环境配置。

方法1:命令行参数

在启动应用时,通过命令行指定:

java -jar myapp.jar --spring.profiles.active=prod

方法2:环境变量

在操作系统中设置环境变量:

  • Linux/Mac
    export SPRING_PROFILES_ACTIVE=prod
    
  • Windows
    set SPRING_PROFILES_ACTIVE=prod
    

方法3:IDE 配置

如果你使用 IntelliJ IDEA,可以按照以下步骤配置:

  1. 打开 Run/Debug Configurations
  2. VM Options 中添加:
    -Dspring.profiles.active=prod
    

方法4:全局配置文件默认设置

application.yml文件中直接指定默认环境:

spring:profiles:active: prod

3. 配置文件加载顺序

Spring Boot 的配置文件加载遵循以下优先级(从高到低):

  1. 命令行参数:最高优先级,覆盖其他所有配置。
  2. 环境变量:覆盖全局配置文件。
  3. 全局配置文件application.ymlapplication.properties 中的默认配置。

配置生效的原理

Spring Boot 会根据spring.profiles.active的值加载相应的环境配置文件,并与全局配置文件进行合并。例如:

假设以下配置:

  • application.yml

    server:port: 8080
    spring:profiles:active: prod
    
  • application-prod.yml

    server:port: 80
    app:name: "MyApp-Prod"
    

应用启动时将按照以下逻辑:

  1. 加载application.yml中的配置,初始端口为8080。
  2. 检测到激活的环境为prod,加载application-prod.yml中的配置。
  3. 合并配置,并覆盖application.yml中重复的属性(如server.port),最终端口为80。

4. 常见问题

多个配置文件冲突时怎么办

如果application.yml和环境配置文件(如application-prod.yml)中存在冲突的配置,环境配置文件的值会优先生效。


忘记指定spring.profiles.active时会发生什么

默认加载application.yml中的配置,如果未指定spring.profiles.active,将不会加载任何环境特定的配置。


敏感信息如何管理

生产环境的敏感信息(如数据库密码)不建议直接写入配置文件,可以使用:

  • 环境变量
  • 加密配置
  • 配置中心(如 Spring Cloud Config 或 Apollo)

5. 注意事项

  • 优先级顺序:命令行参数 > 环境变量 > application.yml 文件配置。
  • 命名规范:确保application-{profile}.yml与spring.profiles.active的值一致。
  • 敏感信息管理:在生产环境中,不要将敏感信息(如数据库密码)直接写入配置文件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475252.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch索引文档的过程? Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说,被智能手机“绑架”是一件心甘情愿的事,和它相处的一天中,不必面对现实的压力,它就像个“舒适区”。这是因为在使用手机的过程中,应用程序(尤其是游戏和社交媒体应用)会不断刺激大…

解决“400 Bad RequestThe plain HTTP request was sent to HTTPS portnginx/1.23.1”

目录 一、问题描述 二、问题解决 三、问题原因 (1)问题成因 (2)那为什么访问其他网站的时候,其不会出错呢?而且自己会用https协议? 一、问题描述 在浏览器直接输入:“xxx.xxx.x…

有趣的跳马问题与最优路径

献给皮鞋👞经理 有一个无限大的棋盘,在某个点有一个只能走日的马,计算马到达棋盘上任意一个点 P(x, y) 最小步数。 “走日” 规则下,任意坐标的 “马” 是否可达任意其它坐标需要证明。按照递归原则,只需证明 “马” …

IDEA自定义文件打开格式

介绍在IDEA中自定义文件打开格式的方法,比如一个文件,可以选择用txt格式打开,也可以选择用xml格式打开,也可以用java格式打开等等,通过这个方法可以方便的用任意格式在idea中打开想要打开的文件。 下面分别讨论三种不…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容,请访问: https://baiduworld.baidu.com 首先,跟大家分享一张图,这个是我们目前大模型应用落地的场景分布。可以看到,大模型…

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页: [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 💯题目💯问题分析解法一:减法法解法二:位运算解法解法三:逻辑非解法解法四:条件运算符解法解法五:数组映射法不同解法的比较…

第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

Python脚本-linux远程安装某个服务

需求: 某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在nginx软件(提供web服务的软件),如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9);如果nginx软件…

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…

x-cmd mod | x pixi - 兼容 Conda 生态的极速包管理器,conda 和 mamba 用户的另一选择

目录 介绍使用语法参数子命令 介绍 x pixi 模块是由 x-cmd 团队使用 posix shell 实现的 pixi 命令增强工具。它能优化 pixi 命令的安装和使用体验,具体如下: 提供带有 advise 的自动补全功能。对于中国区用户,我们还提供了汉化版的 advise…

Rust derive macro(Rust #[derive])Rust派生宏

参考文章:附录 D:派生特征 trait 文章目录 Rust 中的派生宏 #[derive]基础使用示例:派生 Debug 派生其他常用特征示例:派生 Clone 和 Copy 派生宏的限制和自定义派生自定义派生宏上面代码运行时报错了,以下是解释 结论…

Node.js | npm下载安装及环境配置教程

前言: npm 是 Nodejs 下的包管理器,在下载 Node.js 后自动安装,因此本文同时适合 Node.js / npm 的下载安装及环境配置。 一、软件安装 Node.js中文网官网下载页:Node.js 中文网 (nodejs.com.cn) 1)进入下载页&#xf…

pytorch奇怪错误

ValueError: At least one stride in the given numpy array is negative, and tensors with negative strides are not currently supported. (You can probably work around this by making a copy of your array with array.copy().) 今天在这里遇到了一个奇怪的bug impor…

EDA实验设计-led灯管动态显示;VHDL;Quartus编程

EDA实验设计-led灯管动态显示;VHDL;Quartus编程 引脚配置实现代码RTL引脚展示现象记录效果展示 引脚配置 #------------------GLOBAL--------------------# set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_…

151页PDF | XX集团数字化转型SAP项目规划方案(限免下载)

一、前言 这份报告是XX集团数字化转型SAP项目规划方案,该报告涵盖了集团战略解读、管理痛点分析、信息化建设目标、整体架构方案、实施策略、SAP系统价值和预期收益,旨在通过数字化推动集团运营模式变革,实现降本增效和价值创新。 《XX集团…

共建智能软件开发联合实验室,怿星科技助力东风柳汽加速智能化技术创新

11月14日,以“奋进70载,智创新纪元”为主题的2024东风柳汽第二届科技周在柳州盛大开幕,吸引了来自全国的汽车行业嘉宾、技术专家齐聚一堂,共襄盛举,一同探寻如何凭借 “新技术、新实力” 这一关键契机,为新…

在 cmd 输入 python.exe 后不报错也无反应的问题

在 cmd 输入 python.exe 后不报错:‘python.exe ’不是内部或外部命令,也不是可运行的程序或批处理文件,也无反应。只是显示这样一个弹窗: 查了下环境变量path,看看有什么地方有python.exe,发现原来在C:\Us…