jenkins maven nacos springboot profile实现多环境配置

news/2025/9/29 10:53:02/文章来源:https://www.cnblogs.com/hanease/p/19118319
在 Jenkins 构建 Spring Boot 项目时,结合 Maven、Nacos 和 Profile 可以实现多环境(开发、测试、生产)的自动化部署与配置管理。以下是四者的协同工作方式及具体实现步骤:

核心概念与关系

  • Spring Boot Profile:用于区分不同环境的配置(如 dev/test/prod),通过激活不同 Profile 加载对应配置。
  • Maven:构建工具,通过 profiles 定义不同环境的构建参数(如依赖、打包策略),并传递 Profile 给 Spring Boot。
  • Nacos:配置中心,存储各环境的动态配置(如数据库地址、服务地址),支持按 Profile 隔离配置。
  • Jenkins:持续集成 / 部署工具,通过流水线(Pipeline)自动化执行构建、测试、部署流程,并动态指定环境 Profile。
协同逻辑:Jenkins 触发构建时,指定目标环境(如 prod)→ Maven 激活对应 Profile 进行打包 → Spring Boot 启动时读取该 Profile 的配置(包括 Nacos 地址)→ 从 Nacos 拉取对应环境的动态配置。

具体实现步骤

1. 配置 Spring Boot 多 Profile

在 src/main/resources 下创建多环境配置文件:
plaintext
 
 
resources/
├── application.yml          # 公共配置
├── application-dev.yml      # 开发环境配置
├── application-test.yml     # 测试环境配置
└── application-prod.yml     # 生产环境配置
 
application.yml(公共配置,指定 Nacos 地址和默认 Profile):
yaml
 
 
spring:profiles:active: @profile.active@  # 由 Maven 动态注入cloud:nacos:config:server-addr: ${NACOS_ADDR:127.0.0.1:8848}  # Nacos 地址,可通过环境变量覆盖file-extension: yamlgroup: DEFAULT_GROUPnamespace: ${NACOS_NAMESPACE:public}  # Nacos 命名空间(用于环境隔离)
 
application-prod.yml(生产环境特定配置):
yaml
 
 
server:port: 8080
# 其他生产环境专属配置(如日志级别、线程池参数)
 

2. 配置 Maven 多 Profile

在 pom.xml 中定义与 Spring Boot 对应的 Maven Profile,用于传递环境参数:
xml
 
 
<profiles><!-- 开发环境 --><profile><id>dev</id><properties><profile.active>dev</profile.active>  <!-- 对应 Spring Boot 的 dev Profile --><nacos.namespace>dev-namespace</nacos.namespace>  <!-- Nacos 开发环境命名空间 --></properties></profile><!-- 测试环境 --><profile><id>test</id><properties><profile.active>test</profile.active><nacos.namespace>test-namespace</nacos.namespace></properties></profile><!-- 生产环境 --><profile><id>prod</id><properties><profile.active>prod</profile.active><nacos.namespace>prod-namespace</nacos.namespace></properties></profile>
</profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 传递环境变量给 Spring Boot(如 Nacos 命名空间) --><environmentVariables><NACOS_NAMESPACE>${nacos.namespace}</NACOS_NAMESPACE></environmentVariables></configuration></plugin></plugins>
</build>
 
作用:
  • 通过 mvn package -Pprod 激活 Maven 的 prod Profile,将 profile.active 设为 prod,注入到 Spring Boot 的 application.yml 中。
  • 动态指定 Nacos 命名空间,实现配置中心的环境隔离。

3. 在 Nacos 中配置多环境参数

  1. 登录 Nacos 控制台,创建对应命名空间(如 prod-namespace,与 Maven Profile 中的 nacos.namespace 一致)。
  2. 在对应命名空间下创建配置文件,Data ID 格式为 {spring.application.name}-{profile}.yaml(如 user-service-prod.yaml),内容为环境特定的动态配置:
    yaml
     
     
    # Nacos 中 prod 环境的配置
    spring:datasource:url: jdbc:mysql://prod-mysql:3306/user_dbusername: ${DB_USERNAME}  # 可结合 Jenkins 注入敏感信息password: ${DB_PASSWORD}
    
     
     

4. Jenkins 流水线配置(自动构建部署)

创建 Jenkinsfile 定义流水线,实现按参数选择环境并构建部署:
 
 

关键流程解析

  1. 参数传递链:Jenkins 参数(ENV_PROFILE=prod)→ Maven 激活 prod Profile → Spring Boot 加载 application-prod.yml → 从 Nacos 的 prod-namespace 拉取配置。
  2. 配置优先级(从高到低):Jenkins 启动命令参数(--spring.profiles.active)> 环境变量(NACOS_NAMESPACE)> Nacos 配置 > 本地 application-{profile}.yml > 本地 application.yml
  3. 敏感信息处理:数据库密码等敏感信息不应硬编码在配置文件中,可通过 Jenkins 凭据(Credentials)存储,部署时注入为环境变量,再由 Nacos 或 Spring Boot 引用。

优势总结

  • 环境隔离:通过 Profile 和 Nacos 命名空间严格隔离各环境配置,避免混淆。
  • 自动化部署:Jenkins 流水线一键完成从代码拉取到部署的全流程,减少人工操作。
  • 配置动态更新:Nacos 支持配置热更新,无需重启应用即可生效,配合 Profile 实现环境级别的动态调整。
这种组合是企业级 Spring Boot 应用多环境管理的最佳实践,兼顾了开发效率与部署安全性。

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

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

相关文章

RAG is really dead? 大模型和知识之间的桥梁没了? - spader

作者:SpaderMan 从 RAG 到上下文工程:理性思考 AI 应用开发,以交付业务结果为目标 最近,Latent Space 播客发布了一期标题为["RAG 已死,上下文工程为王"](https://www.latent.space/p/chroma "&qu…

.NET操作Excel:高效材料读写与批量运行

.NET操作Excel:高效材料读写与批量运行pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战不止于兴趣,更是技术实践 作为一名开发者兼体育爱好者,我始终对数据驱动体育的世界着迷。但不同于普通观众,我们更关心的是:这些数据如何通过技术手段…

Qwen-Image技术报告

原文:https://mp.weixin.qq.com/s/GLEa3fIc67uX9IK50LDeNw 全文摘要本文介绍了一种名为Qwen-Image的图像生成基础模型,它在复杂文本渲染和精确图像编辑方面取得了显著进展。为了解决复杂文本渲染的挑战,作者设计了一…

苏州相城区网站建设渭南市工程建设项目审批网上办事大厅

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

wordpress全站ajax用wordpress仿a站

中介者模式 中介者模式 中介者模式 介绍&#xff1a;用一个中介对象来封装一系列的对象交互&#xff0c;中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 实现&#xff1a;抽象中介者类&#xff0c;定义一个…

服装设计网上自学课程宁波网站搜索引擎优化

以下文字是钱学森在1990年给汪成为院士的信中对虚拟现实技术的科学意义和未来发展给与的思考和建议&#xff0c;他也提出可以将虚拟现实技术成为灵境技术。

IOS-和安卓-AR-游戏开发指南-全-

IOS 和安卓 AR 游戏开发指南(全)原文:zh.annas-archive.org/md5/eaf1b154611090aa6422cd5e3d6dc2fc 译者:飞龙 协议:CC BY-NC-SA 4.0前言 在本书中,我们将介绍增强现实及其如何使用强大而简单的工具实现。利用 V…

Winform/C# 输出到Release VS中Release模式下生成去掉生成pdb文件

前几天发布项目,有时候就发布那几个dll,但是一个dll同时还有一个pdb文件,而且pdb文件貌似还挺大。 pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为r…

成都响应网站建设网站文章标题

一、实验内容与目的 实验要求&#xff1a; 利用CP226实验仪上的小键盘将程序输入主存储器EM&#xff0c;通过指令的执行实现微程序控制器的程序控制。 实验目的&#xff1a; 1.掌握模型机的操作码测试过程&#xff1b; 2.掌握模型机微程序控制器的基本结构以及程序控制的基本原…

表格上传网站建设网游小说

1. 引言 在任何编程语言中,错误处理都是一个至关重要的部分。在 Go 语言中,错误处理方式独具特色,它并没有采用异常处理机制(try-catch),而是通过显式的错误返回值来处理错误。这种方式让代码更加明确、易于维护,也使得错误处理更加透明。 在这篇博客中,我们将深入探…

做外贸好的网站有哪些百度识图在线

目录 0、基本信息1、研究动机2、创新点2.1、核心思想&#xff1a;2.2、思想推导&#xff1a; 3、准备3.1、符号3.2、互信息3.3、JS散度3.4、Deep InfoMax方法3.5、判别器&#xff1a;f-GAN估计散度 4、具体实现4.1、局部-全局互信息最大化4.2、理论动机 5、实验设置5.1、直推式…

校园二手网站开发与设计任务书行政单位单位网站建设

1.实现一个纵横字谜 2.支持14x14的网格 3.可以查看答案 4.猜测错误会提示答案信息 5.从txt读取词汇 6.每次游戏开始 随机生成纵横字谜 n’h

网站推他网站wordpress教程登陆

1.为什么要有缓冲区 缓冲区分成语言层面的缓冲区和操作系统层面的缓冲区 先说结论&#xff0c;语言的缓冲区可以减少系统调用的次数进而提高向文件写入和读取的效率。 2.举例子 向屏幕打印&#xff0c;无非就是向屏幕这个文件的缓冲区写入&#xff0c;然后在由操作系统刷新…

重庆工程建设信息网站4399谁做的网站

log函数是指数函数y bx 的反函数,用于求数字以某个数为底的对数。log函数的定义:设b>0,b≠1,对于任意实数x > 0,如果存在唯一的实数y,使得 b^y x,则称y为以b为底x的对数,记为:y log_b(x)这里b称为对数的底数。对数运算的底数通常取10和e。常见的对数运算有:1. 常用对数…

公司核名在哪个网站网站提交搜索引擎后出现问题

作者&#xff1a;Zarten知乎专栏&#xff1a;Python爬虫深入详解知乎ID&#xff1a; Zarten简介&#xff1a; 互联网一线工作者&#xff0c;尊重原创并欢迎评论留言指出不足之处&#xff0c;也希望多些关注和点赞是给作者最好的鼓励 &#xff01;介绍MongoDB是一种面向文档型的…

供应商协同平台:打造高效安全供应链的关键

供应商协同平台通过整合技术资源,解决了传统供应链中文件传输混乱、数据更新延迟、安全管控薄弱等问题。结合“Ftrans B2B企业间⽂件安全交换系统”的加密传输与权限管理功能,平台实现了设计图纸、订单数据等关键信息…

互斥锁和信号量机制

互斥锁 特性: 1.需要忙等,进程时间片用完才下处理机,违反让权等待 2.优点:等待奇迹不用切换进程上下文,多处理机系统中,若上锁的时间短,则等待的代价很低 3.常用于多处理机,一个核忙等,其他核照常工作,并快速…

NSIS为当前用户安装和为所有用户安装的选择

一、为当前用户和所有用户安装选择 确定 NSIS 脚本中应使用 SetShellVarContext all 还是 current,主要取决于你的软件安装目标和用户访问需求。可以通过以下几个核心问题来判断: 1. 软件是否需要被系统中所有用户访…

在 Unity 中运用 SoundTouch 插件控制音频倍速播放

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …