如何在带有@Value注释的Spring Boot应用程序中获取maven project.version属性?
在对如何在SpringBoot应用程序中获取Maven项目版本进行了一些研究和试验之后,我找不到适合我的任何东西。
由于类加载器的问题,使用清单绝对是一条烂路,即,一个清单获得了Spring找到的第一个清单,在我的情况下,这不是我的应用程序之一。
我发现的一种解决方案是使用Maven资源插件来“过滤”(替换)资源文件中的属性。在这种情况下是springapplication.properties。
application.properties
以下是完成这项工作的步骤。
在pom文件中,使用以下定义激活资源过滤:
<resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> <includes> <include>application.properties</include> </includes> </resource> </resources>
在application.properties文件中:
application.name=@project.artifactId@ build.version=@project.version@ build.timestamp=@timestamp@
注意@ property @而不是$ {property}。 在application.properties文件中。
该spring-boot-starter-parentPOM重新定义了标准的${}分隔符为@:
spring-boot-starter-parent
${}
@
<resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders --> <delimiters> <delimiter>${resource.delimiter}</delimiter> </delimiters>
然后可以使用以下方式在Spring中访问这些属性@Value:
@Value
@Value("${application.name}") private String applicationName; @Value("${build.version}") private String buildVersion; @Value("${build.timestamp}") private String buildTimestamp;