【springBoot】资源文件的变量替换

在Spring Boot项目中,可以从application.ymlapplication.properties中获取pom.xml中定义的变量。为了实现在application.yml中使用pom.xml中的属性,通常需要在构建过程中将这些属性注入到资源文件中。以下是实现这一目标的几种方法:

方法1:Maven资源过滤

在Maven构建过程中,可以使用资源插件(maven-resources-plugin)的过滤功能,将pom.xml中的属性值注入到资源配置文件中。

  1. pom.xml中定义属性:
<project><!-- ... --><properties><my.version>1.0.0-SNAPSHOT</my.version><!-- 其他属性... --></properties><!-- ... --><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering> <!-- 开启资源过滤 --></resource></resources><!-- ... --></build><!-- ... -->
</project>
  1. application.yml中引用Maven属性:
spring:application:name: @project.artifactId@version: "@my.version@"

在构建过程中,Maven会将@project.artifactId@@my.version@替换为pom.xml中对应的值。

方法2:使用Spring Boot Maven插件

Spring Boot Maven插件提供了一个特性,可以将Maven属性注入到Spring Boot的配置文件中。在pom.xml中启用这个特性:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>...</version><configuration><addResources>true</addResources></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

然后在application.yml中引用Maven属性,方式同方法1。

注意事项

  • Spring Boot并不会原生支持直接在运行时读取pom.xml中的属性。上述方法依赖于Maven构建过程中的资源过滤或Spring Boot Maven插件的特殊处理。
  • 资源过滤功能可能会影响到application.yml中所有变量的处理,确保仅对预期的Maven属性进行替换,避免意外替换其他不应被替换的YAML占位符。
  • 对于方法2,Spring Boot Maven插件会确保在构建Fat JAR时将Maven属性注入到最终的application.yml中,但需要注意的是,这种方法在开发模式下(如IDE内直接运行)可能不生效,因为IDE直接运行时通常不会执行完整的Maven构建流程。

示例用法

在应用代码中读取这些属性,可以使用@Value注解或@ConfigurationProperties来注入:

@Value("${spring.application.version}")
private String applicationVersion;

或者在配置类中:

@Configuration
@ConfigurationProperties(prefix = "spring.application")
public class ApplicationProperties {private String name;private String version;// getters and setters...
}

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

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

相关文章

component-全局透明遮罩层与点击遮罩层关闭

1.创建Overlay.vue的全局组件或子组件&#xff0c;用于显示透明遮罩层。 <template><div class"overlay" click"closeOverlay"></div></template><script>export default {methods: {closeOverlay() {// 子组件调用父组件方…

【office安装错误1402或1406】

office安装错误1402或1406 错误如图 解决方法 打开autoremove&#xff0c;点击扩展&#xff0c;输入1402&#xff0c;点击搜索 等待修复成功&#xff0c;再尝试安装office 软件每周六选择其他登录方式可以免费使用

c++设计模式之观察者模式(消息订阅模式)

一&#xff0c;核心思想&#xff1a;消息订阅&#xff0c; 主题&#xff1a;subject 观察者&#xff1a;observe场景举例&#xff1a; 我&#xff08;observe&#xff09;关注抖音一条小团团&#xff08;subject&#xff09; 小团团一有动静&#xff0c;立马就推送给我场景举例…

Python学习1--变量和简单数据类型

本章练习&#xff1a; Python之禅&#xff1a;

RocketMQ快速入门:namesrv、broker、dashboard的作用及消息发送、消费流程(三)

0. 引言 接触rocketmq之后&#xff0c;大家首当其冲的就会发现需要安装3个组件&#xff1a;namesrv, broker, dashboard&#xff0c;其中dashboard也叫console&#xff0c;为选装。而这几个组件之前的关系是什么呢&#xff0c;消息发送和接收的过程是如何传递的呢&#xff0c;…

如何在Windows 10中打开和自定义搜索?这里提供详细步骤

使用Windows 10中的搜索功能&#xff0c;你可以快速查找计算机上的文件、应用程序或设置。在本文&#xff0c;你可以学习如何在Windows 10中打开和控制搜索。 打开Windows 10搜索面板 打开Windows 10搜索面板很容易。通常&#xff0c;你可以在任务栏上找到搜索图标。只需单击…

如何在PostgreSQL中创建一个新的数据库,并指定所有者?

文章目录 解决方案示例代码 PostgreSQL是一个强大的开源关系型数据库管理系统&#xff0c;它允许用户创建和管理多个数据库。在PostgreSQL中创建一个新的数据库并指定所有者是一个常见的操作。下面&#xff0c;我们将详细解释如何执行这一操作&#xff0c;并提供示例代码。 解…

【Linux】Shell脚本(文件操作)

在上一篇博客中&#xff0c;我分享了一些关于Shell编程的整理内容&#xff0c;希望能够为大家提供一些基础知识和入门指导。这次&#xff0c;我将继续和大家分享一些更具实用价值的Shell脚本示例&#xff0c;主要是以文件操作相关的内容。 批量重命名文件 #!/bin/bash# Functio…

灭火器检查记录卡模板如何制作

灭火器是常见的消防设备&#xff0c;为确保灭火器正常使用&#xff0c;需要定期对灭火器进行检查和维护&#xff1b;而灭火器检查记录卡就是用来记录灭火器检查的重要工具。然而传统的灭火器检查记录卡都是纸质的&#xff0c;哪怕我们采购多好多贵材质做的检查卡终归记录有限、…

Midjourney如何利用chaos控制生成图片的差异化

hello 小伙伴们&#xff0c;我是你们的老朋友——树下&#xff0c;今天分享Midjourney提示词常用参数——chaos&#xff0c;话不多说&#xff0c;直接开始~ chaos参数什么意思呢&#xff1f; 它可以用来控制我们生成图片之间的差异化程度的一个参数 通常我们在用Midjourney生…

K8s: 控制器之ReplicaSet对象

ReplicaSet 控制副本 1 ) 概述 pod 是一个无状态的&#xff0c;并且可以被任意的按需的调度&#xff0c;在各个work node上运行的组件 谁来控制这类调度就变得非常复杂&#xff0c;不可能去手工的去维护某一个pod的一个运行实例 如果那样的话呢&#xff0c;它就失去了容器的概…

proxy的应用实例

习题一 实现下面例子中的效果&#xff0c;需要怎么做&#xff1f; var arr [a, b, c, d, e, f]; console.log(a a.a a.a.a a.a.a.a a.a.a.a.a); // abcdef看到a a.a a.a.a a.a.a.a a.a.a.a.a的形式&#xff0c;第一个出现的解决办法就是&#xff1a;Proxy代理。其次…

LateX的基础学习

what can i say 在text.tex中写下 \documentclass{article} \begin{document]Hello \LaTeX. \end{document} 关闭记事本&#xff0c;cmd中dir保存&#xff0c;用latex text.tex来编译&#xff0c;可以命令行慢慢编译&#xff0c;这可以做成bat文件 为什么不直接开始在texst…

Java基本语法(基础部分)

Java基本语法 文章目录 Java基本语法前言一、准备工作1.1 计算机软件与硬件1.2 计算机编程语言1.3 Java语言概述&程序分析1.4 Java环境搭建&Java API1.5 Java核心机制JVM 二、变量2.1 关键字&标识符2.2 变量2.3 数据类型(基本数据类型)2.3.1 基本数据类型2.3.2 基本…

Go源码--Strings库

1. 简介 strings库 存储了 一些针对 字符串的具体操作 其 代码短小精悍 可以学习到很多编程的思路 尤其是 涉及到字符串使用性能的方面&#xff0c;其源码库有好多的优秀案例可以学习。向强者对齐不一定成为强者&#xff0c;但向弱者对齐一定变为弱者。 介绍思路是先介绍 stri…

oracle操作系统OS认证和密码文件认证

1 说明 1.1 常见认证方式 Oracle登录认证方式主要涉及到如何验证用户身份以访问数据库。Oracle数据库提供了多种认证机制来确保数据的安全性和访问控制&#xff0c;每种方式都有其特定的使用场景和安全性考虑。以下是Oracle中常见的登录认证方式&#xff1a; 1、基于操作系统…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库&#xff08;Scikit-image&#xff09;提供了一个强大的工具集&#xff0c;用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例&#xff1a; from skimage import ioimg io.imread(…

Unpaired Image Super-Resolution using Pseudo-Supervision

CVPR2020解决的问题是当前的SR模型基于成对的数据&#xff0c;且其中LR的图片是通过HR经过bicubic下采样得到的&#xff0c;而实际图片的degradation过程更为复杂&#xff0c;且本文提出的方法不需要成对的HR-LR数据&#xff1b;提出的模型包含两个部分&#xff1a; – correct…

中北大学软件学院操作系统实验二进程调度算法

实验时间 2024年 4 月13日14时至16时 学时数 2 1.实验名称 实验二进程调度算法 2.实验目的 (1)加深对进程的概念及进程调度算法的理解&#xff1b; (2)在了解和掌握进程调度算法的基础上&#xff0c;编制进程调度算法通用程序&#xff0c;将调试结果显示在计算机屏幕上&am…

什么是大语言模型以及如何构建自己的大型语言模型?

一、关于大语言模型 LLM 对于无数的应用程序非常有用&#xff0c;如果我们自己从头开始构建一个&#xff0c;那我们可以了解底层的ML技术&#xff0c;并可以根据特定需求定制LLM&#xff0c;但是对资源的需求巨大。大型语言模型是一种 ML 模型&#xff0c;可以执行各种自然语言…