我正在尝试在视图中显示 Spring Boot 应用程序的应用程序版本。我确定我可以访问此版本信息,只是不知道如何访问。
我尝试遵循以下信息:https://docs.spring.io/spring-boot/docs/current/reference/html/product-ready-endpoints.html,并将其放入我的
application.properties
:
info.build.version=${version}
然后将其加载到我的控制器中
@Value("${version.test}")
,但这不起作用,我只收到如下错误:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in string value "${version}"
关于将我的应用程序版本、Spring Boot 版本等信息获取到我的控制器的正确方法有什么建议吗?
您也可以将其添加到
build.gradle
:
springBoot {
buildInfo()
}
然后,你可以使用
BuildProperties
bean :
@Autowired
private BuildProperties buildProperties;
并通过
buildProperties.getVersion()
获取版本
如参考文档中描述的,您需要指示 Gradle 处理您应用程序的资源,以便它将用项目的版本替换 ${version}
占位符:
processResources {
expand(project.properties)
}
为了安全起见,您可能需要缩小范围,以便仅处理 application.properties
:
processResources {
filesMatching('application.properties') {
expand(project.properties)
}
}
现在,假设您的财产名为 info.build.version
,则可以通过
@Value
:获取它
@Value("${info.build.version}")
${version?:unknown}
它也可以从 cli:
gradle bootRun 以及 IntelliJ 运行,并且您不必在 IntelliJ 中启动之前调用 Gradle 任务 processResources 或使用 spring 配置文件。
这适用于 Gradle 版本:4.6 以及 Spring Boot 版本:2.0.1.RELEASE。 希望有帮助;)
info.build.version
中定义您的
application.properties
:
info.build.version=whatever
在你的组件中使用它
@Value("${info.build.version}")
private String version;
现在将您的版本信息添加到您的
build.gradle
文件中,如下所示:
version = '0.0.2-SNAPSHOT'
然后添加一个方法来用正则表达式替换你的 application.properties 来更新你的版本信息:
def updateApplicationProperties() {
def configFile = new File('src/main/resources/application.properties')
println "updating version to '${version}' in ${configFile}"
String configContent = configFile.getText('UTF-8')
configContent = configContent.replaceAll(/info\.build\.version=.*/, "info.build.version=${version}")
configFile.write(configContent, 'UTF-8')
}
最后,确保在触发
build
或
bootRun
时调用该方法:
allprojects {
updateVersion()
}
就是这样。如果您让 Gradle 编译您的应用程序以及从 IDE 运行 Spring Boot 应用程序,则此解决方案有效。该值不会更新,但不会抛出异常,一旦您运行 Gradle,它就会再次更新。
我希望这对其他人有帮助,也为我解决了问题。我找不到更合适的解决方案,所以我自己编写了脚本。
project.version= ${version}
tasks.processResources { filesMatching("**/application.properties") { expand(project.properties) } }
@Value("\${project.version}") lateinit var version: String