Spring Boot 获取当前应用的版本

公司的运行环境有点神奇,有时K8S的集群在生产环境会被人复制一份,成为一个新集群在跑,而且我们还不知道他们什么时候会做这件事。于是有可能,我们上了新版本,被复制的集群在跑旧版本。
怎么办呢?小弟突发奇想:能不能把我们期望运行的版本号放在Redis里,然后本应用启动的时候看看版本对不对,版本不对就不提供服务。
这个方案未必适合。但是我也想看看能不能取得应用的版本号。

查看了一下Spring Boot打出来的包,找到一个 "META-INF/MANIFEST.MF", 竟然很神奇地有我想要的信息。

Implementation-Title: demo
Implementation-Version: 0.0.1-SNAPSHOT

那最简单的做法就是读这个文件并把结果拿出来!
上代码:

package cn.gzten.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

@RestController
public class TestController {
    @GetMapping("/")
    public String getVersion() {
        try(InputStream ins = ClassLoader.getSystemResourceAsStream("META-INF/MANIFEST.MF")) {
            Properties prop = new Properties();
            prop.load(ins);
            String appName = prop.getProperty("Implementation-Title");
            String appVersion = prop.getProperty("Implementation-Version");
            return String.join("-", appName, appVersion);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

结果不错:

$ curl -i http://localhost:8080
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 19

demo-0.0.1-SNAPSHOT
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容