SpringBoot - Spring Profiles 详解

news2025/1/6 14:37:19

文章目录

  • Pre
  • 官方文档
  • Spring Profiles 详解
    • 1. 基本用法
    • 2. 激活 Profiles
    • 3. 添加 Active Profiles
    • 4. Profile Groups
    • 5. 在代码中设置 Profiles
    • 6. Profile 特定的配置文件
  • 总结

在这里插入图片描述


Pre

SpringBoot - Spring Boot 中的配置体系Profile全面解读

SpringBoot - spring.profiles.active最佳实践


官方文档

https://docs.spring.io/spring-boot/reference/features/profiles.html

Spring Profiles 详解

Spring Profiles 提供了一种将应用程序配置的部分内容隔离并仅在特定环境中可用的方式。通过使用 @Profile 注解,可以限制 @Component@Configuration@ConfigurationProperties 类在特定环境下加载。

接下来我们将详细介绍 Spring Profiles 的使用方法,包括如何激活 Profiles、添加 Active Profiles、Profile Groups 以及如何在代码中设置 Profiles。


1. 基本用法

任何 @Component@Configuration@ConfigurationProperties 类都可以通过 @Profile 注解来限制其加载时机。例如,以下配置类仅在 production Profile 激活时加载:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {
    // ...
}

如果 @ConfigurationProperties 类是通过 @EnableConfigurationProperties 注册的,而不是通过自动扫描注册的,则需要在带有 @EnableConfigurationProperties 注解的 @Configuration 类上指定 @Profile 注解。如果 @ConfigurationProperties 类是扫描注册的,则可以直接在 @ConfigurationProperties 类上指定 @Profile 注解。


2. 激活 Profiles

可以通过 spring.profiles.active 环境属性来指定哪些 Profiles 是激活的。可以在 application.properties 中指定该属性,例如:

spring.profiles.active=dev,hsqldb

也可以在命令行中使用 --spring.profiles.active 参数来指定:

java -jar myapp.jar --spring.profiles.active=dev,hsqldb

如果没有激活任何 Profile,则会启用默认的 Profile。默认 Profile 的名称是 default,可以通过 spring.profiles.default 属性进行调整:

spring.profiles.default=none

需要注意的是,spring.profiles.activespring.profiles.default 只能在非 Profile 特定的文档中使用。这意味着它们不能包含在 Profile 特定的文件或由 spring.config.activate.on-profile 激活的文档中。

例如,以下配置是无效的:

spring.profiles.active=prod
#---
spring.config.activate.on-profile=prod
spring.profiles.active=metrics

3. 添加 Active Profiles

spring.profiles.active 属性遵循与其他属性相同的优先级规则:最高优先级的 PropertySource 会生效。这意味着可以在 application.properties 中指定激活的 Profiles,然后通过命令行参数替换它们。

有时,我们希望添加激活的 Profiles 而不是替换它们。可以使用 spring.profiles.include 属性在 spring.profiles.active 激活的 Profiles 基础上添加额外的 Profiles。SpringApplication 入口点还提供了一个 Java API 来设置额外的 Profiles,即 setAdditionalProfiles() 方法。

例如,当运行以下配置的应用程序时,即使使用 --spring.profiles.active 参数,commonlocal Profiles 也会被激活:

spring.profiles.include[0]=common
spring.profiles.include[1]=local

spring.profiles.active 类似,spring.profiles.include 只能在非 Profile 特定的文档中使用。


4. Profile Groups

有时,应用程序中定义和使用的 Profiles 过于细粒度,使用起来会变得繁琐。例如,可能有两个 Profiles:proddbprodmq,分别用于启用数据库和消息功能。

为了解决这个问题,Spring Boot 允许你定义 Profile Groups。Profile Group 允许你为相关的 Profiles 定义一个逻辑名称。

例如,我们可以创建一个 production 组,包含 proddbprodmq Profiles:

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq

现在,可以通过 --spring.profiles.active=production 来启动应用程序,从而一次性激活 productionproddbprodmq Profiles。

spring.profiles.activespring.profiles.include 类似,spring.profiles.group 只能在非 Profile 特定的文档中使用。


5. 在代码中设置 Profiles

你可以在应用程序运行之前通过调用 SpringApplication.setAdditionalProfiles(...) 来以编程方式设置激活的 Profiles。还可以使用 Spring 的 ConfigurableEnvironment 接口来激活 Profiles。

例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setAdditionalProfiles("dev", "hsqldb");
        app.run(args);
    }
}

6. Profile 特定的配置文件

Spring Boot 支持 Profile 特定的配置文件,例如 application-dev.propertiesapplication-prod.yaml。这些文件会根据激活的 Profiles 自动加载。例如,如果激活了 dev Profile,则 application-dev.properties 文件会被加载。

还可以在 @ConfigurationProperties 类中引用 Profile 特定的配置文件。例如:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private String description;

    // Getters and setters
}

然后在 application-dev.properties 中指定属性:

myapp.name=MyApp (Dev)
myapp.description=This is the development environment.

总结

Spring Profiles 提供了一种灵活的方式来管理不同环境下的应用程序配置。通过 @Profile 注解,可以轻松地控制配置类和组件的加载时机。通过 spring.profiles.activespring.profiles.include 属性,可以灵活地激活和组合 Profiles。Profile Groups 则进一步简化了多个相关 Profiles 的管理。此外,Spring Boot 还支持 Profile 特定的配置文件,使得不同环境下的配置管理更加方便。

在这里插入图片描述

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

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

相关文章

MyBatis如何处理延迟加载?

大家好,我是锋哥。今天分享关于【MyBatis如何处理延迟加载?】面试题。希望对大家有帮助; MyBatis如何处理延迟加载? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MyBatis 中,延迟加载(Laz…

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这也是面试中考察求职者,是否真的做过系统开发和上线的必备问题。包括:服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志,如果…

重庆市大数据局:基于可信数据空间的公共数据流通利用

在2024年可信数据空间论坛上,重庆市大数据局相关领导发表了题为:基于可信数据空间的公共数据流通利用的演讲,系统介绍了重庆公共数据流通方面的实践经验和案例。 篇幅限制,部分内容如下:

Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】

-----------------测试时间2025年1月3日------------------- 下载地址 官方网址:https://www.sublimetext.com 更新日志:https://www.sublimetext.com/download V4189 64位:https://www.sublimetext.com/download_thanks?targetwin-x64 ....…

LabVIEW开发中常见硬件通讯接口快速识别

在 LabVIEW 开发中,与硬件进行通讯是实现数据采集与控制的重要环节。准确判断通讯接口类型和协议,可以提高开发效率,减少调试时间。本文结合 LabVIEW 的实际应用,详细介绍如何识别和判断常见硬件通讯接口的定义,并提供…

刷机TP TP-Link-WDR5660【持续更新】

上文中简单介绍了:路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度-CSDN博客 步骤如下: 第一步:安装Linux系统 本文使用virtualBox 安装Ubuntu的debian系统,本文不在讲述章 请自行参考:Kali 安装之腾讯云经验…

Linux-Redis哨兵搭建

环境资源准备 主机名IP端口号角色vm1192.168.64.156379/26379mastervm2192.168.64.166379/26379slavevm3192.168.64.176379/26379slave 6379为redis服务暴露端口号、26379为sentinel暴露端口号。 安装Redis # 包文件下载 wget https://github.com/redis/redis/archive/7.2.2…

df.groupby()方法使用表达式分组

# 索引值是否为偶数,分成两组 df.groupby(lambda x:x%20).sum() df.groupby(df.index%20).sum() # 同上这两个写法看似相似,确实都基于索引值来进行分组,但在实现方式上有细微的区别: df.groupby(lambda x: x % 2 0) 这种方式通过…

Python 数据可视化的完整指南

目录 一、为什么选择 Python 进行数据可视化? 二、常用 Python 可视化库及其特点 三、常用图表类型及其代码示例 折线图:用于展示数据随时间或其他连续变量的变化趋势。 柱状图:用于比较不同类别的数据大小。 散点图:用于展示两个变量之间的关系,并发现数据中的模式…

国内Ubuntu环境Docker部署CosyVoice

国内Ubuntu环境Docker部署CosyVoice 本文旨在记录在 国内 CosyVoice项目在 Ubuntu 环境下如何使用 dockermin-conda进行一键部署。 源项目地址: https://github.com/FunAudioLLM/CosyVoice 如果想要使用 dockerpython 进行部署,可以参考我另一篇博客中的…

Git的使用流程(详细教程)

目录 01.Git是什么? 1.1 Git简介 1.2 SVN与Git的最主要的区别 1.3 GIt主要特点 02.Git是干什么的? 2.1.Git概念汇总 2.2 工作区/暂存区/仓库 2.3 Git使用流程 03.Git的安装配置 3.1 Git的配置文件 3.2 配置-初始化用户 3.3 Git可视化…

ImageNet 2.0?自动驾驶数据集迎来自动标注新时代

引言: 3DGS因其渲染速度快和高质量的新视角合成而备受关注。一些研究人员尝试将3DGS应用于驾驶场景的重建。然而,这些方法通常依赖于多种数据类型,如深度图、3D框和移动物体的轨迹。此外,合成图像缺乏标注也限制了其在下游任务中的…

npm install --global windows-build-tools --save 失败

注意以下点 为啥下载windows-build-tools,是因为node-sass4.14.1 一直下载不成功,提示python2 没有安装,最终要安装这个,但是安装这个又失败,主要有以下几个要注意的 1、node 版本 14.21.3 不能太高 2、管理员运行 …

Beamer-LaTeX学习(教程批注版)【1】

该文档总体由beamer-latex的教程而来,由耳东小白以自身学习路径整理。因其中要点基本按照教程的顺序和结构整理,故而不能称之为完全原创,但也不是翻译,更不是抄袭,是个人自学笔记和批注,其中添加了小白个人…

wx005基于springboot+vue+uniapp的大学生心理健康测评管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

SpringBoot整合springmvc、扩展springmvc

目录 一、 SpringMVC三大组件二、 Spring MVC 组件的自动管理2.1 中央转发器(DispatcherServlet)2.2 控制器2.3 视图解析器自动管理2.4 静态资源访问2.5 消息转换和格式化2.6 欢迎页面的自动配置 三、Springboot扩展springmvc3.1 视图控制器注册&#xf…

STM32使用UART发送字符串与printf输出重定向

首先我们先看STM32F103C8T6的电路图 由图可知,其PA9和PA10引脚分别为UART的TX和RX(注意:这个电路图是错误的,应该是PA9是X而PA9是RX,我们看下图的官方文件可以看出),那么接下来我们应该找到该引脚的定义是什么&#xf…

力扣28找出字符串中第一个匹配项的下标

class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack,检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…

8、RAG论文笔记(Retrieval-Augmented Generation检索增强生成)

RAG论文笔记 1、 **研究背景与动机**2、方法概述3、RAG 模型架构3.1总体架构3.2 Generator(生成器)3.3 检索器(Retriever)3.4训练(Training)3.5**解码方法**(求近似 )3.6微调的参数 …

PCA降维算法详细推导

关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…