spring.profiles生效顺序

这篇具有很好参考价值的文章主要介绍了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-growth

logging.level: INFO


actuator:
  project: noodles-commerce-growth
  enabled: true
  openFalconEnabled: false

logging.access.directory: /home/shared/log

spring.profiles.active: local,sg-test

security.filterOrder: 20

---
spring:
  profiles: local

logging.access.enabled: false
zkServers: sh-zk1,sh-zk2,sh-zk3,sh-zk4,sh-zk5

rpcServer.zkNode: false

---
# 测试服务环境
spring:
  profiles: test

logging.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,默认为 true
  dynamicConfigKey: noodles-mysql-noodles_commerce_growth-test
  dynamicConfigGroup: op-dba-mysql-conf
  readWriteSplit: true                      #开启读写分离需要指定,默认是false 关闭读写分离



---
# 线上服务环境
spring:
  profiles: online




logging.config: classpath:log4j2.online.yaml
logging.access.directory: /home/shared/log

sentry.dsn: https://6041205e545f455b96fda7d679a23c83@sentry-internal-noodles.zhuangzi.com/399

---
# 线上服务环境
spring:
  profiles: bj-online

db.datasource.noodlesCommerceGrowth:
  dynamicConfigEnabled: true                # Optional,默认为 true
  dynamicConfigKey: noodles-mysql-commerce_growth-online
  dynamicConfigGroup: op-dba-mysql-conf
  readWriteSplit: true                      #开启读写分离需要指定,默认是false 关闭读写分离

---
# 大兴线上机房
spring:
  profiles: dx-online

zkServers: dx-zk1,dx-zk2,dx-zk3,dx-zk4,dx-zk5

---
# 廊坊线上机房
spring:
  profiles: lf-online

zkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5

---
# alibj1 线上机房

spring:
  profiles: alibj1-online

zkServers: 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: true
    defaultProductId: 503
    appKey: Ape
    escapePatterns:
      - /nooldes-commerce-growth/api/order/\d+
      - /nooldes-commerce-growth/api/order/share-info
      - /.*/swagger/.*

# Web Server 配置
server:
    port: 8080
    tomcat:
        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-web

fdc.projectIdentity: noodles-commerce-growth

captain.enabled: false

spring.datasource.initialize: false

spring.profiles.active: local,soho-test,bj-test

# 本地环境
cache:
    local:
        song:
            capacity: 3000
            ttl-in-seconds: 60
        album:
            capacity: 1000
            ttl-in-seconds: 60
        type2albums:
            capacity: 1000
            ttl-in-seconds: 60

springfox.documentation.swagger.v2.host: noodels.commerce.com

# Redis 配置

alimq.topics:

---
spring:
    profiles: local

rpcServer.zkNode: false
logging.access.enabled: false
actuator.enabled: false

---
# 测试服务环境
spring:
    profiles: test

logging.config: classpath:log4j2.test.yaml
logging.access.directory: /home/shared/log

---
# 线上服务环境
spring:
    profiles: online

logging.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-dev

zkServers: noodles-zk1-dev,noodles-zk2-dev,noodles-zk3-dev

---
# 大兴线上机房
spring:
    profiles: dx-online

zkServers: dx-zk1,dx-zk2,dx-zk3,dx-zk4,dx-zk5

---
# 廊坊线上机房
spring:
    profiles: lf-online

zkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5

---
spring:
    profiles:
        include: backend

文件分析:

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

总结

相同配置项生效顺序遵循了就近原则,后加载覆盖之前加载的配置项。文章来源地址https://www.toymoban.com/news/detail-722485.html

到了这里,关于spring.profiles生效顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java微服务架构之Spring Boot —上篇

    SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。2014年4月,Spring Boot1.0.0发布。Spring的顶级项目

    2024年04月28日
    浏览(45)
  • 解析Spring Boot中的Profile:配置文件与代码的双重掌控

    基于 Spring Boot 创建 Web 应用程序的方法有很多,我们选择在idea中直接进行创建,服务器URL选择Spring Initializer 网站,类型选择Maven项目,java版本根据jdk版本进行选择。 然后添加相应依赖以及选择spring boot版本 接下来我们写一个Controller 现在我们需要对这个应用程序进行打包,使

    2024年02月09日
    浏览(43)
  • spring boot 启动失败,不报错,但是报这个No active profile set, falling back to default profiles: default

    解决方案引入对应的文件,在application.yml中引入: 接下来在对应的目录中创建对应的不同环境的yml文件,如下图所示: 此时切换至开发环境,项目运行读取的是application-dev.yml配置,如果需要读取生产环境,将application.yml中的active:dev改成prod即可。如果需要添加更多环境配置

    2024年02月14日
    浏览(46)
  • Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

       一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑,驳回的立项编辑,在途流程查看。 二、项目管

    2024年02月17日
    浏览(54)
  • spring boot集成redis,以及配置database不生效问题

    备注:记录一次spring-boot + redis 配置redis.database后,仍然使用db0默认库的情况。 完成以上配置,即redis已经正常集成进入项目。 完成以上配置,即可正常使用了       如果是单独仅集成redis,database 配置是肯定生效的,因为没有影响,这里记录一个遇到的情景:       即

    2024年01月19日
    浏览(54)
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解)

    2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解) 本篇使用当前Java Web开发主流的spring-boot3框架来创建一个Java前后端分离的项目,前端使用的也是目前前端主流的vue3进行一个简单的项目搭建,让你距离Java全栈开发更近一步 🏴‍☠️。 使用版本: “17.0.1”

    2024年02月12日
    浏览(88)
  • K8s 上Spring boot环境变量配置无法生效问题

    首先介绍一下,问题发现的场景,存在一个项目,在本地开发环境上,spring项目的数据库、redis等中间件的配置参数都是配置在application.yml 文件里的,所以修改配置直接改改文件就可以了,但是当项目部署在k8s的集群上,想要通过修改application.yml文件里的配置项,发现修改无

    2023年04月08日
    浏览(42)
  • Spring Boot Aop 执行顺序

    在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限,等等。所以,在项目中学习并使用 aop ,是十分必要的。然而,当我们在一个接口中使用多个 aop,时,就需要注意他们的

    2024年01月24日
    浏览(51)
  • Spring Boot 的系统配置文件加载顺序

    【理论介绍】 配置文件加载顺序: 1、项目根目录下的config目录。【优先级最高】 2、项目根目录。 3、classpath下的config目录。 4、classpath目录(新建项目时application.properties默认所在位置)。【优先级最低】 备注: 加载顺序:4 - 3 - 2 - 1。 优先级:逐渐减低(1234)。 【举例说

    2024年02月09日
    浏览(53)
  • spring boot rabbitmq 如何保持顺序消费

    RabbitMQ 是一个消息代理和队列功能的开源实现,可以帮助构建分布式应用程序。Spring Boot 集成 RabbitMQ 可以方便地在应用程序中使用消息队列,保持顺序消费可以通过以下方式来实现: 单线程消费:使用一个线程消费消息,因为 RabbitMQ 的队列是有序的,所以保证单线程的消费

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包