无法使用@Value 在 Spring 应用程序中获取 maven project.version 属性

新手上路,请多包涵

如何在带有 @Value 注释的 Spring Boot 应用程序中获取 maven project.version 属性?

原文由 Jack G. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
1 个回答

在对如何在 SpringBoot 应用程序中获取 Maven 项目版本进行一些研究和试验之后,我找不到任何适合我的东西。

由于类加载器问题,使用清单绝对是一条烂路,即获得 Spring 发现的第一个清单,在我的情况下不是我的应用程序。

我发现的一种解决方案是使用 maven 资源插件来“过滤”(替换)资源文件中的属性。在这种情况下,弹簧 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-parent pom 将标准 ${} 分隔符重新定义为 @

 <resource.delimiter>@</resource.delimiter>
<!-- delimiter that doesn't clash with Spring ${} placeholders -->
<delimiters>
    <delimiter>${resource.delimiter}</delimiter>
</delimiters>

然后可以使用 @Value 在 Spring 中访问这些属性,如下所示:

 @Value("${application.name}")
private String applicationName;

@Value("${build.version}")
private String buildVersion;

@Value("${build.timestamp}")
private String buildTimestamp;

此处提供了一个示例项目

原文由 Jack G. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题