Mar*_*zec 1 spring-mvc spring-boot
在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中设置的产品版本.要实现此目的,您需要确保Implementation-Version设置清单的属性.
让我们假设您希望version.properties在您的文件中src/main/resources包含您的版本信息.它将包含占位符而不是实际值,以便在构建期间可以扩展这些占位符.
version=${prodVersion}
build=${prodBuild}
timestamp=${buildTimestamp}
Run Code Online (Sandbox Code Playgroud)
既然你有这样的文件,你需要用实际数据填充它.我使用Gradle,因此我会确保processResources为构建自动运行的任务正在扩展资源.像这样的东西应该在build.gradle基于Git的代码的文件中做到:
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 }
Run Code Online (Sandbox Code Playgroud)
在关于以下内容的代码中发生:
processResources任务配置为处理
version.properties文件并使用我们的变量填充它.
prodVersion取自Gradle项目版本.它通常设置为version在gradle.properties文件(一般构建设置的一部分).考虑到您使用的是SVN,您需要使用getSvnBranchCommit()方法.例如,你可以使用SVNKit或类似的东西.
现在缺少的最后一件事是读取您的应用程序中使用的文件.
这可以通过简单地读取类路径资源并将其解析为来实现java.util.Properties.您可以更进一步,例如getVersion(),专门为每个字段创建访问器方法,例如getBuild(),等等.
希望这有点帮助(即使可能不是100%直接适用)
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |