在Spring Boot项目中,可以从application.yml
或application.properties
中获取pom.xml
中定义的变量。为了实现在application.yml
中使用pom.xml
中的属性,通常需要在构建过程中将这些属性注入到资源文件中。以下是实现这一目标的几种方法:
方法1:Maven资源过滤
在Maven构建过程中,可以使用资源插件(maven-resources-plugin)的过滤功能,将pom.xml
中的属性值注入到资源配置文件中。
- 在
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>
- 在
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...
}