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

server/2024/11/15 5:28:38/

在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来注入:

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

或者在配置类中:

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

http://www.ppmy.cn/server/11656.html

相关文章

上汽大通:依托电子签网络,升级产业供应链协同

2023年12月&#xff0c;法大大发布了中国首部《汽车行业合同数智化白皮书》&#xff08;点击阅读及下载&#xff1a;中国首部&#xff01;《汽车行业合同数智化白皮书》重磅发布 | 附下载&#xff09;。该白皮书中基于法大大自身参与汽车行业合同数智化建设的实践和思考&#x…

VUE识别图片文字OCR(tesseract.js)

效果:1&#xff1a; 效果图2&#xff1a; 一、安装tesseract.js npm i tesseract.js 二、静态页面实现 <template><div><div style"marginTop:100px"><input change"handleChage" type"file" id"image-input"…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…

使用R语言生成频数分布表

概要 使用R语言生成频数分布表 在R语言中&#xff0c;可以使用freq()函数来生成频数分布表。首先&#xff0c;将需要分组的数据存储在一个向量中。然后&#xff0c;使用freq()函数将这个向量作为参数输入&#xff0c;即可生成频数分布表。以下是一个示例&#xff1a; 示例 …

sqlalchemy bindparam的简单使用

在 SQLAlchemy 中&#xff0c;bindparam 用于在 SQL 表达式中定义命名的绑定参数。这些参数可以在执行 SQL 语句时被具体的值所替代。bindparam 主要用于动态地构建 SQL 语句&#xff0c;允许你在执行时传入参数值。 当你在使用 SQLAlchemy 的 text 构造器来执行原生 SQL 时&a…

【数学】主成分分析(PCA)的应用案例解析(Python)

接着上文PCA的数学详细推导过程&#xff0c;本文介绍使用Python结合图像压缩案例解释PCA的具体实现流程&#xff0c;以了解数据处理的一些方法 Jupyter Notebook file 文章目录 借助 scikit-learn 实现 PCA输入数据PCA降维并重建 手动实现 PCA 过程输入数据数据居中处理协方差矩…

MFC中CPropertyPage与CDialogEx的作用是什么,有什么区别,什么情况下会需要继承这两个类?

在MFC&#xff08;Microsoft Foundation Classes&#xff09;库中&#xff0c;CPropertyPage和CDialogEx是用于创建不同类型用户界面的类。以下是它们的作用、区别、使用方式以及何时需要继承这两个类的详细说明。 一、作用 CPropertyPage&#xff1a; CPropertyPage类用于创…

题解:力扣704/35/34

1.力扣704 : 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。示例 1:输入: nums [-1,0,3,5,9,12], target 9 …