本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/03/11/create-project-information-endpoint/
Spring Boot中的Endpoint可以提供很多便利信息,但是有时候自带的信息不能满足需要,就需要我们自己创建一个Endpoint。
对于一个项目而言我们希望能够了解到一些基本的信息,比如项目的构建环境,git仓库信息,CI的build number等等。
Netflix的nebula项目提供了很多gradle的插件,而搜集信息我们可以使用gradle-info-plugin。
buildscript {
repositories { jcenter() }
dependencies { classpath 'com.netflix.nebula:gradle-info-plugin:3.+' }
}
apply plugin: 'nebula.info'
这样在gradle构建项目的时候就会自动搜集信息,并存储在Properties文件中。这样就可以自定义一个Endpoint来展示这些信息。
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@Component
public class VersionEndpoint extends AbstractEndpoint<Map<String, Object>> {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public VersionEndpoint() {
super("version", false);
}
@Override
public Map<String, Object> invoke() {
HashMap<String, Object> maps = Maps.newHashMap();
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("META-INF/{项目名字}.properties");
try {
Properties properties = new Properties();
properties.load(inputStream);
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
maps.put(String.valueOf(entry.getKey()), entry.getValue());
}
} catch (IOException e) {
logger.error("Error when process file", e);
}
return maps;
}
}
这样我们访问/version时就可以看到类似这样的输出

参考资料
https://github.com/nebula-plugins/gradle-info-plugin
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/03/11/create-project-information-endpoint/
你好
我应该称呼你为学长吗?我是电子信息工程专业一名大三的学生,目前对于未来规划和职业方向还很迷茫,看了你的文章觉得你一定是一名出色的人,希望可以得到你的一些指导。雷涛