【问题标题】:Show Spring Boot buildInfo() version rendered inside JSP显示在 JSP 中呈现的 Spring Boot buildInfo() 版本
【发布时间】:2019-06-04 08:26:36
【问题描述】:

我正在使用以下 Gradle sn-p 生成我的 Spring Boot 应用程序的构建信息:

springBoot {
    buildInfo()
}

这可确保在构建过程中在 WAR 工件内部创建一个名为 /META-INF/build-info.properties 的文件,并使用属性 build.version=1.2.3(以及其他一些属性)

我正在构建一个 WAR,而不是 JAR,因为我依赖于渲染旧版 JSP。

在这些 JSP 中,我需要打印这个版本。我尝试了以下方法:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<spring:eval expression="@environment.getProperty('build.version')" var="version" />

<p>Version is: ${version}</p>

但这仍然是空的。看起来我可以通过这种方式从我的 application.properties 访问任何内容,但不能从其他生成的 build-info.properties 访问任何内容

向 JSP 获取此版本信息的正确方法是什么?

请注意,这是一个限制我选择的遗留应用程序:

  • 我无法从 JSP 切换到现代替代方案,例如 Thymeleaf
  • 这些 JSP 相当简单。我不想创建(和复制)控制器来设置必要的变量

替代方案

我发现以下替代方法可行,但并不理想,因为它复制了我在应用程序的其他地方无论如何都需要的 buildInfo() 插件的行为:

  • 将application.version=${project.version} 添加到我自己的application.properties
  • 将processResources { expand(project.properties) } 添加到build.gradle
  • 在JSP里面访问@environment.getProperty('application.version')

【问题讨论】:

    标签: java spring spring-boot jsp gradle


    【解决方案1】:

    META-INF/build-info.properties 是一个 Spring Boot Actuator 配置文件,因此不是正常应用程序属性的一部分。

    它的内容可通过BuildProperties bean 单独获得。

    在您的控制器中:

    @Autowired
    BuildProperties buildProperties;
    
    . . .
        String version = buildProperties.getVersion();
    

    (请注意,bean 仅在 build-info.properties 存在时才定义,因此最好将其连接为 required=false)

    或通过 SpEL:

    @Value("#{buildProperties.get('version')}")
    String version;
    

    在 JSP 中使用类似这样的东西(未经测试):

    <spring:eval expression="#{buildProperties.get('version')}" var="version" />
    
    <p>Version is: ${version}</p>
    

    【讨论】:

    • buildProperties 来自哪里?就像我在原始问题中所写的那样,我在许多 JSP 中都需要此功能。我不想仅仅为了传递这个值而创建一个相同的控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2019-04-04
    • 2018-01-13
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多