当前位置: 首页 > news >正文

spring.profiles生效顺序

服务在不同环境启动,需要的运行参数可能会有差异,不同启动环境也可能公用同一份运行参,为了方便对这些不同环境相同和差异参数进行管理,springboot提供了文件配置化形式对这些参数进行管理,对于不同环境的差异化参数使用spring.profiles关键字进行了隔离。

示例文件分析

(文件中配置项纯属杜撰,只是为了为了方便分析环境参数家在生效顺序)
项目noodles-commerce-growth的backend模块中配置文件:application-backend.yaml

projectIdentity: noodles-commerce-growth
fdc.projectIdentity: noodles-commerce-growth
# ServiceInstanceMeta
serviceInstanceMeta:serviceName: noodles-commerce-growthlogging.level: INFOactuator:project: noodles-commerce-growthenabled: trueopenFalconEnabled: falselogging.access.directory: /home/shared/logspring.profiles.active: local,sg-testsecurity.filterOrder: 20---
spring:profiles: locallogging.access.enabled: false
zkServers: sh-zk1,sh-zk2,sh-zk3,sh-zk4,sh-zk5rpcServer.zkNode: false---
# 测试服务环境
spring:profiles: testlogging.config: classpath:log4j2.test.yaml
---
# 大兴测试机房
spring:profiles: sh-test# ZooKeeper 配置
zkServers: sh-zk1,sh-zk2,sh-zk3,sh-zk4,sh-zk5---
# 润泽测试机房
spring:profiles: rz-test# ZooKeeper 配置
zkServers: sh-zk1,sh-zk2,sh-zk3,sh-zk4,sh-zk5---
# 测试服务环境
spring:profiles: bj-test# MySQL 连接配置
db.datasource.noodlesCommerceGrowth:dynamicConfigEnabled: true                # Optional,默认为 truedynamicConfigKey: noodles-mysql-noodles_commerce_growth-testdynamicConfigGroup: op-dba-mysql-confreadWriteSplit: true                      #开启读写分离需要指定,默认是false 关闭读写分离---
# 线上服务环境
spring:profiles: onlinelogging.config: classpath:log4j2.online.yaml
logging.access.directory: /home/shared/logsentry.dsn: https://6041205e545f455b96fda7d679a23c83@sentry-internal-noodles.zhuangzi.com/399---
# 线上服务环境
spring:profiles: bj-onlinedb.datasource.noodlesCommerceGrowth:dynamicConfigEnabled: true                # Optional,默认为 truedynamicConfigKey: noodles-mysql-commerce_growth-onlinedynamicConfigGroup: op-dba-mysql-confreadWriteSplit: true                      #开启读写分离需要指定,默认是false 关闭读写分离---
# 大兴线上机房
spring:profiles: dx-onlinezkServers: dx-zk1,dx-zk2,dx-zk3,dx-zk4,dx-zk5---
# 廊坊线上机房
spring:profiles: lf-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5---
# alibj1 线上机房spring:profiles: alibj1-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5

文件分析:

1、不同环境下的差异化参数使用spring.profiles: local、spring.profiles: test、spring.profiles: soho-test、spring.profiles: bj-test、spring.profiles: rz-test、spring.profiles: online、spring.profiles: bj-online、spring.profiles: dx-online、spring.profiles: lf-online、spring.profiles: alibj1-online;从文件顶部到spring.profiles: local部分的配置信息为所有环境公用。

2、通过spring.profiles.active: local,sg-test指定服务启动时选择的环境参数。比如idea本地启动时默认选择的环境参数是就是配置文件中的spring.profiles.active: local,sg-test。首先可以指定服务运行时参数的地方有和生效次序为:命令行方式 > Java系统属性方式 > 系统变量方式 > 配置文件方式,在启动本地idea时,在前三种没有配置的情况下,就按照配置文件中spring.profiles.active指定环境选择对应的运行参数。

3、在spring.profiles.active中可以指定多个环境,多个环境的差异参数参数相同互补、形成一个全集对运行服务生效,不同环境的相同参数按照从左到右的顺序,以最右面的参数为准。

4、服务运行的环境通常分为本地(local)、测试(test)和生产(online)环境,为什么都是线上环境还有有多个呢,比如test和sg-test,online、bj-online、dx-onlne、lf-online和alibj1-online?针对这个问题,首先是sping.profiles的数据完全可以和真实服务运行环境数量保持一致,其中一个猜想是即使对同一种服务运行环境,配置对应的服务可能失效,多个备份可以起到容灾的目的。

常见的项目架构中,采用了模块化的思想对项目进行拆分以实现代码的复用和不同服务之间的解耦,这种模块化思想对配置文件同样适用。

noodles-commerce-growth的的某个服务中的配置文件application.yaml:


# tracing配置
tracing.enabled: true # tracing开关,所有环境默认开启,不用再配置
tracing.reporterConfig.enabled: true # tracing上报数据开关,测试环境默认关,线上环境默认开
serviceInstanceMeta.serviceName: noodles-commercee-growth # 在阿里云控制台展示的服务名# authFilter 配置
authFilter:internationalEnabled: truedefaultProductId: 503appKey: ApeescapePatterns:- /nooldes-commerce-growth/api/order/\d+- /nooldes-commerce-growth/api/order/share-info- /.*/swagger/.*# Web Server 配置
server:port: 8080tomcat:maxThreads: 500# multipart 配置
spring.http.multipart:max-file-size: 5MB       # multipart单个文件大小限制max-request-size: 10MB   # multipart整个request的大小限制file-size-threshold: 1MB # 大于fileSizeThreshold的在解析过程中会写磁盘, 否则是纯内存操作# sentinel 开关
spring.cloud.ahas.sentinel.web.enabled: false#海外http接口下发的域名替换
overseas:domain:replace: true# Actuator 配置
actuator:project: noodles-commerce-growth# Captain 配置
captain:serviceName: noodles-commerce-growth-webfdc.projectIdentity: noodles-commerce-growthcaptain.enabled: falsespring.datasource.initialize: falsespring.profiles.active: local,soho-test,bj-test# 本地环境
cache:local:song:capacity: 3000ttl-in-seconds: 60album:capacity: 1000ttl-in-seconds: 60type2albums:capacity: 1000ttl-in-seconds: 60springfox.documentation.swagger.v2.host: noodels.commerce.com# Redis 配置alimq.topics:---
spring:profiles: localrpcServer.zkNode: false
logging.access.enabled: false
actuator.enabled: false---
# 测试服务环境
spring:profiles: testlogging.config: classpath:log4j2.test.yaml
logging.access.directory: /home/shared/log---
# 线上服务环境
spring:profiles: onlinelogging.config: classpath:log4j2.online.yaml
logging.access.directory: /home/shared/log# Redis 配置alimq.topics:
---
# 大兴测试机房
spring:profiles: soho-test# ZooKeeper 配置
zkServers: soho-zk1,soho-zk2,soho-zk3,soho-zk4,soho-zk5---
# 润泽开发机房
spring:profiles: rz-devzkServers: noodles-zk1-dev,noodles-zk2-dev,noodles-zk3-dev---
# 大兴线上机房
spring:profiles: dx-onlinezkServers: dx-zk1,dx-zk2,dx-zk3,dx-zk4,dx-zk5---
# 廊坊线上机房
spring:profiles: lf-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5---
spring:profiles:include: backend

文件分析:

1、相比上一个文件,这个文件中多了spring.profiles.include配置项,服务启动时,会先加载backend中的profiles,然后和当前文件进行合并和覆盖,相同配置项当前文件会覆盖被引入的文件。

总结

相同配置项生效顺序遵循了就近原则,后加载覆盖之前加载的配置项。

相关文章:

spring.profiles生效顺序

服务在不同环境启动,需要的运行参数可能会有差异,不同启动环境也可能公用同一份运行参,为了方便对这些不同环境相同和差异参数进行管理,springboot提供了文件配置化形式对这些参数进行管理,对于不同环境的差异化参数使…...

【经典PageRank 】02/2 算法和线性代数

系列前文:【经典 PageRank 】01/2 PageRank的基本原理-CSDN博客 一、说明 并非所有连接都同样重要! 该算法由 Sergey 和 Lawrence 开发,用于在 Google 搜索中对网页进行排名。基本原则是重要或值得信赖的网页更有可能链接到其他重要网页。例…...

【微客云】91优惠话费充值API接口开发功能介绍

话费充值接口文档 接口版本:1.0 ―、引言 文档概述 本文档提供话费充值接口规范说明,提供一整套的完整的接入示例(http 接口)供商户参 考,可以帮助商户开发人员快速完成接口开发与联调,实现与话费充值系统的交易互联。 公司官网…...

Kubernetes - 一键安装部署 K8S(附:Kubernetes Dashboard)

问题描述 不知道大伙是如何安装 K8s,特别还是集群的时候,我上一次安装搭建的时候,那个恶心到我了,真的是一步一个脚印走完整个搭建流程,爬了不少坑。 于是,才有了今天的文章,到底有没有可以一…...

Camera2开发基础知识篇——手机影像参数

1. 2、对焦 对焦指相机将图像清晰聚焦的过程。自动对焦功能可自动调整焦点,确保主体清晰锐利。手动对焦功能允许用户手动选择焦点。 3、焦距 简单理解就是指镜头的视角和放大倍数。实际到物理设备,焦距就是从镜片光学中心到底片、CCD或CMOS等成像平面…...

Unity之ShaderGraph如何实现无贴图水球效果

前言 我们今天来实现一个无贴图水球效果,如下图所示: 主要节点 UVSplit:可以获得UV在RGB三个颜色分别的分量 Remap:重映射节点 基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值,返回输入Out Min Max…...

【C语言】指针错题(类型分析)

题目&#xff1a; #include <stdio.h> int main () {int*p NULL;int arr[10] {0}; return 0; } 选项&#xff1a; A、p arr ; B、 int (* ptr )[10]& arr ; C、 p & arr [ 0 ]; D、 p & arr ; 解析&#xff1a; 1、 p 是一个指针变量&#xff0c;指…...

prosemirror 学习记录(二)创建 apple 节点

apple type 向 schema 中添加 apple type const nodes {apple: {inline: true,attrs: {name: { default: "unknown" },},group: "inline",draggable: true,parseDOM: [{tag: "span[custom-node-typeapple]",getAttrs(dom) {return {name: dom…...

自然语言处理---迁移学习

fasttext介绍 作为NLP工程领域常用的工具包&#xff0c;fasttext有两大作用&#xff1a;进行文本分类、训练词向量。在保持较高精度的情况下&#xff0c;快速的进行训练和预测是fasttext的最大优势。fasttext优势的原因: fasttext工具包中内含的fasttext模型具有十分简单的网络…...

node 第十天 原生node封装一个简易的服务器

原生node封装一个简易的服务器, 把前面几天的知识揉和起来做一个服务器基础实现, 首页访问, 静态资源服务器, 特定接口封装, 404app.js 服务器入口文件 app.js node app.js即可启动服务器 const { start } require(./modules/server); start();require_modules.js 整合模块导…...

php实战案例记录(25)intval函数的用法

在PHP中&#xff0c;intval()函数用于将一个字符串转换为整数。它的语法如下&#xff1a; intval(string $value, int $base 10): int参数说明&#xff1a; $value&#xff1a;要转换的字符串。$base&#xff08;可选&#xff09;&#xff1a;进制数&#xff0c;默认为10。如…...

laravel框架介绍(二) composer命令下载laravel报错

1.composer命令下载laravel报如下错 &#xff1a; curl error 18 while downloading https://repo.packagist.org/p2/symfony/uid.j son: transfer closed with 3808 bytes remaining to read&#xff0c;具体为 解决方案&#xff1a;执行以下命令切换镜像 >composer con…...

代码签名证书到期了怎么续费?

我们都知道代码签名证书最长期限可以申请3年&#xff0c;但有的首次申请也会申请1年&#xff0c;这种情况下证书到期了就意味着要重新办理&#xff0c;同样的实名验证步骤还需要再走一遍&#xff0c;尤其目前无论是哪种类型的代码签名证书都会有物理硬件&#xff0c;即使交钱实…...

JAVA 同城服务预约家政小程序开发的优势和运营

随着社会节奏的加快&#xff0c;人们对家庭清洁和维护的需求日益增长。为了满足这一需求&#xff0c;JAVA同城服务预约家政小程序应运而生。本文将详细介绍该小程序开发的优势及运营策略&#xff0c;帮助读者更好地了解其价值和潜力。 一、开发优势 方便快捷&#xff1a;用户…...

基于粒子群算法的无人机航迹规划-附代码

基于粒子群算法的无人机航迹规划 文章目录 基于粒子群算法的无人机航迹规划1.粒子群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用粒子群算法来优化无人机航迹规划。 1.粒子群…...

前端使用qrcodejs2插件实现根据网址生成二维码

实现效果&#xff1a; 实现方法&#xff1a; 1.安装插件 npm install --save qrcodejs2 2.可以全局引入&#xff0c;也可以只在使用的vue文件中引入 import QRCode from qrcodejs2; 3.在vue文件的template中设置放置二维码的div <div id"qrcode"></di…...

A股风格因子看板 (2023.10 第11期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第11期&#xff0c;指数组合数据截止日2023-09-30&#xff0c;要点如下 近1年A股风格因子检验统…...

anaconda安装python 3.11

最近需要测试gpt researcher项目&#xff0c;gpt researcher项目的环境是3.11&#xff0c;于是用anaconda创建一个虚拟环境&#xff0c;结果报错了&#xff1a; UnsatisfiableError: The following specifications were found to be incompatible with each other:Package xz c…...

问题:EventSource 收不到流数据及 EventSource 的 onmessage 方法为null

文章目录 问题分析问题 在开发时,有用到 EventSource,但是在 new EventSource 的时候,打印 new EventSource 如下: onmessage : null, onerror : null, onopen: f(event)前端...

P2 B+树索引

文章目录 Task1 B树页B树页B树内部结点B树叶子结点 Task2 B树操作Task2 B树插入和搜索的单一值插入单一值搜索单一值 Task2 B树删除 Task3 叶子扫描的迭代器Task4 并行索引 Task1 B树页 B树页 实际上是每个B树页面的标题部分&#xff0c;包含叶子页面和内部页面共享的信息。 …...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...