gpt4 book ai didi

spring-mvc - spring boot/spring web app内嵌版本号

转载 作者:行者123 更新时间:2023-12-05 08:57:14 28 4
gpt4 key购买 nike

在 Spring 应用程序中嵌入唯一版本号的策略是什么?

我有一个使用 Spring Boot 和 Spring Web 的应用程序。

它已经足够成熟,我想对其进行版本控制并在运行时看到它显示在屏幕上。

最佳答案

我相信您正在寻找的是在构建期间(通常通过 Ant、Maven 或 Gradle 等构建工具)生成此版本号作为其构建任务链的一部分。

我认为一种非常常见的方法是将版本号放入生成的 JAR 的 Manifest.mf 中然后读取它,或者创建一个文件作为生成的 JAR 的一部分,您的应用程序可以读取该文件。

另一种解决方案是使用此处描述的 Spring Boot 横幅自定义选项:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html#boot-features-banner但是,这只允许您更改 spring-boot 横幅。

我还相信 Spring Boot 公开了在您的应用程序的 Manifest.MF 中设置的产品版本。为此,您需要确保设置了 list 的 Implementation-Version 属性。

可在代码中任意位置访问的自定义解决方案

假设您希望在您的 src/main/resources 中有一个包含您的版本信息的 version.properties 文件。它将包含占位符而不是实际值,以便可以在构建期间扩展这些占位符。

version=${prodVersion}
build=${prodBuild}
timestamp=${buildTimestamp}

现在您有了这样的文件,您需要用实际数据填充它。我使用 Gradle,所以我会确保为构建自动运行的 processResources 任务正在扩展资源。对于基于 Git 的代码,类似这样的东西应该可以在 build.gradle 文件中实现:

import org.codehaus.groovy.runtime.*
import org.eclipse.jgit.api.*

def getGitBranchCommit() {
try {
def git = Git.open(project.file(project.getRootProject().getProjectDir()));
def repo = git.getRepository();
def id = repo.resolve(repo.getFullBranch());
return id.abbreviate(7).name()
} catch (IOException ex) {
return "UNKNOWN"
}

}

processResources {
filesMatching("**/version.properties") {
expand (
"prodVersion": version,
"prodBuild": getGitBranchCommit(),
"buildTimestamp": DateGroovyMethods.format(new Date(), 'yyyy-MM-dd HH:mm')
)
}
}

processResources.outputs.upToDateWhen{ false }

在代码中发生了以下情况:

  1. 我们定义了一个函数,可以从 VCS 中获取内部版本号(在本例中为 Git)。提交哈希限制为 7 个字符。
  2. 我们配置 processResources 任务来处理version.properties 文件并用我们的变量填充它。prodVersion 取自 Gradle 项目版本。通常设置作为 gradle.properties 文件中的 version(通用构建的一部分设置)。
  3. 作为最后一步,我们确保它始终处于更新状态(Gradle有一些机制来检测文件是否被处理

考虑到您使用的是 SVN,您将需要一个 getSvnBranchCommit() 方法。例如,您可以为此使用 SVNKit 或类似工具。

现在缺少的最后一件事是读取在您的应用程序中使用的文件。

这可以通过简单地读取类路径资源并将其解析为 java.util.Properties 来实现。您可以更进一步,例如专门为每个字段创建访问器方法,例如 getVersion()getBuild() 等。

希望这能有所帮助(尽管可能不是 100% 直接适用)

关于spring-mvc - spring boot/spring web app内嵌版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34772726/

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