gpt4 book ai didi

spring-boot - 在 Spring Boot 2.0 中使用 @Value 访问 buildInfo

转载 作者:行者123 更新时间:2023-12-01 19:35:04 26 4
gpt4 key购买 nike

之前在 Spring Boot 1.x 中,我编写了一个 Gradle 任务来将 jar 的构建版本复制到应用程序的 application.yml并用正则表达式替换给定的属性,例如info.build.version: 0.0.1
迁移到 Spring Boot 2.0,我意识到有 io.spring.dependency-management允许我定义 buildInfo 的插件任务:

springBoot {
buildInfo()
}

这在访问 /info 时有效并成功显示相同的信息。致动器。

现在我想使用生成的 build.versionMETA-INF/build-info.properties在两个用例中:
  • 在 SwaggerUI 中显示版本
  • 在每个日志行中包含版本

  • 以前,访问这样的属性就足够了: @Value("${info.build.version:undefined}") String buildVersion或在 logback-spring.xml :
    <springProperty scope="context" name="applicationVersion" source="info.build.version"/>

    不幸的是,即使我替换了 info.build.version,这两个访问器都不再起作用了。与 build.version (正如我所期望的那样)。

    我相信在 logback 中包含版本只是通过 @Value 访问属性的一小步。注释,所以这是我问题的核心:

    如何访问生成的 build.versionMETA-INF/build-info.properties通过 @Value ?

    我也尝试添加任务
    processResources {
    filesMatching('build-info.properties') {
    expand(project.properties)
    }
    }

    正如 https://stackoverflow.com/a/42051412/3105453 中的建议但这似乎没有任何效果。

    最佳答案

    说到spring-boot , spring 处理的几乎所有信息都最有可能作为 spring 管理的 bean 访问。

    有关构建信息,spring-boot有一个 bean为 Autowiring 而暴露,称为 buildProperties .这发生在 ProjectInfoAutoConfiguration模块。

    与 Spring 表达式语言 ( SpEL ) 一起支持 @Value注释,您可以获得如下所述的预期结果。

    @Value("#{buildProperties.get('version')}")           // not 'build.version'
    private String myAppBuildVersion;

    或者更好的是,自动连接 buildProperties bean 直接添加到您的组件中,因此您可以随意使用它。
    @Autowired
    private BuildProperties buildProperties;

    NOTE: The autoconfiguration strips off the build. prefix. So your SpEL expressions should use version as key. Not build.version.



    更新:

    我首先对你的问题感到困惑,因为问题更多的是关于如何使用 @Value注解。所以我将保留上述答案。

    帮助您处理 logback-spring.xml , 导入 build-info.properties进入 logback-spring.xml如下所示。这允许使用 logback place-holders 访问 build-info.properties 中的每个键。 . (不要将此与 Spring Property 占位符或 Spring-Expressions 混淆)
    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
    <springProperty scope="context" name="appLogTarget" source="app.log.target"
    defaultValue="CONSOLE"/>
    <property resource="META-INF/build-info.properties" />


    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
    <Pattern>[${build.version}] %d{ISO8601}" %-5p [%c{3}"] \(%t:%X{}"\) %m%n</Pattern>
    </layout>
    </appender>
    <root>
    <level value="DEBUG"/>
    <appender-ref ref="CONSOLE"/>
    </root>
    </xml>
    "resource" <properties/> 的属性(property)标签将通过 classpath resources并找到一个合适的。

    关于spring-boot - 在 Spring Boot 2.0 中使用 @Value 访问 buildInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748780/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com