如何在 Spring Boot 的配置文件中使用环境变量?

news2024/9/23 11:19:47

1. 概述

在本教程中,我们将讨论如何在 Spring Boot 的application.propertiesapplication.yml中使用环境变量。然后,我们将学习如何在代码中引用这些属性。
在这里插入图片描述

2. 在application.properties文件中使用环境变量

让我们定义一个名为JAVA_HOME的全局环境变量,其值为“ C:\Program Files\Java\jdk-11.0.14 ”。
要在 Spring Boot 的application.properties中使用此变量,我们需要用括号将其括起来:

java.home=${JAVA_HOME}

我们也可以以同样的方式使用系统属性。例如,在 Windows 上,默认定义了一个 OS 属性:

environment.name=${OS}

也可以组合多个变量值。让我们定义另一个环境变量HELLO_BAELDUNG,其值为“ Hello Baeldung ”。现在我们可以连接这两个变量:

baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}

属性baeldung.presentation 现在包含以下文本:
Hello Baeldung. Java is installed in the folder: C:\Program Files\Java\jdk-11.0.14 ”。

这样,我们的属性根据环境具有不同的值。

在这里插入图片描述

3. 在代码中使用我们环境特定的属性

假设我们启动了一个Spring 上下文,我们现在将看到如何将属性值注入到我们的代码中。

3.1. 使用@Value注入值

首先,我们可以使用**@Value**注释。@Value处理setter,构造函数和字段注入:

@Value("${baeldung.presentation}")
private String baeldungPresentation;

3.2. 从 Spring环境获取

我们还可以通过 Spring 的Environment获取属性的值。我们需要自动装配它:

@Autowired
private Environment environment;

现在可以通过getProperty()方法检索属性值:

environment.getProperty("baeldung.presentation")

3.3. 使用@ConfigurationProperties对属性进行分组

如果我们想要将属性组合在一起,@ConfigurationProperties注释非常有用。我们将定义一个组件,它将收集具有给定前缀的所有属性,在我们的例子中是baeldung。然后,我们可以为每个属性定义一个setter。setter的名称是属性名称的其余部分。在我们的例子中,我们只有一个,称为presentation:

@Component
@ConfigurationProperties(prefix = "baeldung")
public class BaeldungProperties {

    private String presentation;

    public String getPresentation() {
        return presentation;
    }

    public void setPresentation(String presentation) {
        this.presentation = presentation;
    }
}

我们现在可以自动连接BaeldungProperties对象:

@Autowired
private BaeldungProperties baeldungProperties;

最后,为了获取特定属性的值,我们需要使用相应的 getter:

baeldungProperties.getPresentation()

4. 在application.yml文件中使用环境变量

和application.properties一样,application.yml是一个配置文件,它定义了应用程序的各种属性和设置。要使用环境变量,我们需要在属性占位符中声明其名称。

让我们看一个带有属性占位符和变量名的示例application.yml文件:

spring:
  datasource:
    url: ${DATABASE_URL}

上面的示例显示我们正在尝试在 Spring Boot 应用程序中导入数据库 URL。${DATABASE_URL}表达式提示 Spring Boot 查找名为DATABASE_URL的环境变量。

要在application.yml中定义环境变量,我们必须以美元符号开头,后跟左花括号、环境变量的名称和右花括号。所有这些组合构成了属性占位符和环境变量名称。

此外,我们可以在代码中使用特定于环境的属性,就像我们对application.properties所做的那样。我们可以使用@Value注释注入值。此外,我们可以使用Environment类。最后,我们可以使用@ConfigurationProperties注释。

5. 结论

在本文中,我们学习了如何根据环境定义具有不同值的属性并在代码中使用它们。此外,我们还了解了如何在application.properties和application.yml文件中定义环境变量。最后,我们查看了将定义的属性注入示例代码的示例。

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

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

相关文章

60行代码就可以训练/微调 Segment Anything 2 (SAM 2)

SAM2(Segment Anything 2)是Meta开发的一个新模型,可以对图像中的任何物体进行分割,而不局限于特定的类别或领域。这个模型的独特之处在于其训练数据的规模:1100万张图像和110亿个掩码。这种广泛的训练使SAM2成为训练新…

Linux内核分析(Linux中的进程)

文章目录 前言一、进程的概念1. 进程的概念2. 在内核中,进程叫做任务3. 进程的虚拟地址空间总结 二、进程的生命周期三、task_struct结构体分析三、进程的状态TASK_RUNNING (0)TASK_INTERRUPTIBLE (1)TASK_UNINTERRUPTIBLE (2)__TASK_STOPPED (4)__TASK_TRACED (8)E…

第十一章:特征选择与稀疏学习

1. 子集搜索与评价 “特征”:属性 “相关特征”:对当前学习任务有用的属性 “无关特征”:没什么用的属性,与当前的学习任务无关的属性 “特征选择”:从给定的特征集合中选择出相关特征子集的过程,(数据…

海外公司注册推广:10个值得尝试的创新战略

在全球化和数字化时代,海外公司注册已成为一种重要趋势。许多企业意识到,将业务扩展到国外市场可以带来巨大的商机和竞争优势。面对不同的国家法规和市场环境,注册一家海外公司并将其推广并非易事。本文将介绍10个值得尝试的创新战略&#xf…

【Android 笔记】记移植OpenCV4.8图像人脸识别

前言 因业务需要,使用大屏端摄像头捕获图像,且要识别图像中人脸的数目以及从中随机抽取一人。 业务流程如下,调用摄像头预览、拍照,使用OpenCV库进行人脸识别,将识别到的人脸使用矩形框绘制出来,从识别的人…

Matlab绘制像素风字母颜色及透明度随机变化动画

本文是使用 Matlab 绘制像素风字母颜色及透明度随机变化动画的教程 实现效果 实现代码 如果需要更改为其他字母组合,在下面代码的基础上简单修改就可以使用。 步骤:(1) 定义字母形状;(2) 给出字母组合顺序;(3) 重新运行程序&#…

15年以来 — 战略性云平台服务的演进路径之全面呈现(含亚马逊、微软和谷歌)

Gartner每年都发布对全球IaaS平台进行评估的魔力象限报告。2023年底,Gartner将此项评估的名称改为“战略性云平台服务”(Strategic cloud platform services),尽管其核心仍为IaaS,但是,毫无疑问&#xff0c…

【深度学习】什么是深度学习?

1. 前言 深度学习是机器学习的一个分支,它使用神经网络教计算机做人类自然而然会做的事情:从示例中学习。在深度学习中,模型会学习直接从图像、文本或声音等数据中执行分类或回归任务。深度学习模型可以达到最先进的准确率,通常超…

WPF自定义控件

控件模板 顾名思义就是在原有的控件上进行模版修改成自己需要的样式 把ProgressBar修改为一个水液面的进度条 <Window x:Class"XH.CustomLesson.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://s…

树莓派3B升级glibc-2.29

自从我树莓派的python升级到3.9&#xff0c;每次import numpy都会报错&#xff1a;libm.so.6: version GLIBC_2.29 not found。这又是怎么回事呢&#xff1f;查了资料才知道&#xff0c;原来是我的respbian系统版本低的原因&#xff08;如图&#xff09;。 &#xff08;可以用l…

Facebook广告投放优化思路分享,为何总是低量级

为什么谷歌优化总是不起效果&#xff1f;今天我来谈谈我的Facebook广告优化思路&#xff0c;希望对你有所帮助。感兴趣的可以点赞、收藏。关注我&#xff0c;每天分享海外推广知识。 以下是Facebook广告优化思路思维导图&#xff1a; 那么&#xff0c;今天主要来谈谈量级低的情…

哪个工具可以ai续写免费?多维度评测分享

在创意的征途中&#xff0c;你是否曾遇到过文思枯竭的困境&#xff1f;当灵感如同夜空中的流星&#xff0c;一闪而逝&#xff0c;如何捕捉并延续那份璀璨&#xff1f;答案或许就藏在ai续写软件的无限可能中。 不知道ai续写软件哪个好&#xff1f;别急&#xff0c;今天&#xff…

Win10 禁止更新-【延长更新时间】

文章目录 操作注册表 操作注册表 Win R regedit 打开注册表 粘贴&#xff1a; ** \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 代开目录 新建32位数据值 &#xff1a;FlightSettingsMaxPauseDays 999 然后到更新界面&#xff0c;就可以一直点

数字信号处理3:数字滤波器设计

文章目录 前言一、实验目的二、实验设备三、实验内容四、实验原理五、实验方法及要求1.用脉冲响应不变法设计巴特沃斯数字滤波器2. 用双线性变换法设计切比雪夫数字滤波器3. 用双线性变换法设计巴特沃斯数字滤波器,并将直接型结构转换成级联型结构4. 数字低通滤波器特性比较5…

GD - EmbeddedBuilder_v1.4.1.23782工程中的gdc名称必须和工程名称一致

文章目录 GD - EmbeddedBuilder_v1.4.1.23782工程中的gdc名称必须和工程名称一致概述笔记总结END GD - EmbeddedBuilder_v1.4.1.23782工程中的gdc名称必须和工程名称一致 概述 在看EmbeddedBuilder_v1.4.1.23782自带的demo工程。 看到 D:\EmbeddedBuilder_v1.4.1.23782\exam…

工业一体机立式报工台助力工厂改善生产报工效率

在现代化工业生产中&#xff0c;生产效率和管理水平是企业竞争力的关键。为了实现高效的生产管理&#xff0c;工厂需要一个可靠、稳定、便捷的报工系统。传统的报工方式存在诸多弊端&#xff0c;例如效率低、易出错、数据难以统计分析等。而工厂软件报工台立式工业一体机的出现…

家里浮毛怎么去掉最高效?这些宠物空气净化器总有一款适合你

我家是三个月大的时候被我领回家的。它简直就是个小天使&#xff0c;乖得不得了&#xff0c;既不乱尿也不掉毛。每次去朋友家&#xff0c;看到他们为猫咪掉毛头疼不已&#xff0c;我就忍不住在心里偷偷乐&#xff0c;觉得自己真是捡到了宝&#xff0c;怎么会有这么省心的猫咪呢…

上海知名泌尿外科专家常态化坐诊黄山新晨医院,让前列腺癌看得更早、更准!

继7月28日上海第四人民医院泌尿外科专家在黄山新晨医院开展义诊之后&#xff0c;8月9日和10日&#xff0c;该团队领头人周铁教授又完成了合作以来的首次坐诊&#xff0c;标志着双方合作从此进入常态化阶段。 周铁主任在查看患者的检查报告 周铁主任曾任中华医学会泌尿外科分会…

拍立淘API:商品ID与标题的快速获取

拍立淘&#xff08;Pailitao&#xff09;是阿里巴巴旗下的一个基于图像识别技术的购物应用功能&#xff0c;用户可以通过拍照或上传图片来快速找到相似的商品。然而&#xff0c;拍立淘本身并不直接提供一个公开的API接口供开发者使用来直接获取商品ID和标题等信息。 如果你想通…

C++现代教程五

#pragma once _Pragma("once")# C/C混合编程 #ifdef __cplusplus extern "C" { #endif // 一些c代码 #ifdef __cplusplus } #endif# 继承构造 struct A {A(int i) {}A(double d,int i){}A(float f,int i,const char* c){}//...等等系列的构造函数版本 }&am…