在Spring Boot项目中,可以从application.yml或application.properties中获取pom.xml中定义的变量。为了实现在application.yml中使用pom.xml中的属性,通常需要在构建过程中将这些属性注入到资源文件中。以下是实现这一目标的几种方法:
在Maven构建过程中,可以使用资源插件(maven-resources-plugin)的过滤功能,将pom.xml中的属性值注入到资源配置文件中。
pom.xml中定义属性:<project>
<properties>
<my.version>1.0.0-SNAPSHOTmy.version>
properties>
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
project>
application.yml中引用Maven属性:spring:
application:
name: @project.artifactId@
version: "@my.version@"
在构建过程中,Maven会将@project.artifactId@和@my.version@替换为pom.xml中对应的值。
Spring Boot Maven插件提供了一个特性,可以将Maven属性注入到Spring Boot的配置文件中。在pom.xml中启用这个特性:
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>...version>
<configuration>
<addResources>trueaddResources>
configuration>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
然后在application.yml中引用Maven属性,方式同方法1。
pom.xml中的属性。上述方法依赖于Maven构建过程中的资源过滤或Spring Boot Maven插件的特殊处理。application.yml中所有变量的处理,确保仅对预期的Maven属性进行替换,避免意外替换其他不应被替换的YAML占位符。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...
}