显示在JSP

时间:2019-01-09 14:22:41

标签: java spring spring-boot jsp gradle

我正在使用以下Gradle片段生成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')

1 个答案:

答案 0 :(得分:0)

META-INF/build-info.properties是Spring Boot Actuator配置文件,因此不属于常规应用程序属性。

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

在您的控制器中:

@Autowired
BuildProperties buildProperties;

. . .
    String version = buildProperties.getVersion();

(请注意,只有在build-info.properties存在的情况下才定义bean,因此最好将其连接为required=false

或通过SpEL:

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

在JSP中具有类似以下内容(未经测试):

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

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