代码之家  ›  专栏  ›  技术社区  ›  Geoffrey Wiseman

扩展GitInfoContributor以添加属性?

  •  1
  • Geoffrey Wiseman  · 技术社区  · 6 年前

    在我发现Spring Boot的信息执行器几乎拥有我想要发布的所有内容之前,我创建了一些元端点,以确保我可以访问构建和Git信息,这些信息在尝试验证以下内容时会有所帮助:

    • “是否部署了正确的版本?”
    • “什么时候建的?”
    • “这是基于哪个git提交的?”

    在做了这些之后,我发现了信息执行器,它为我回答了几乎所有的问题,但是我想从Git信息中添加一些东西——主要是commit消息和dirty标志。

    我查看了启用完整git元数据时的输出:

    management.info.git.mode=full
    

    但是。。。这增加了更多的信息,其中大部分我并不关心,所以这比我真正想要的更多。

    我想做的是使用GitInfoContributor并扩展/替换它,但我不确定如何做到这一点。添加自己的贡献者很容易,但是如果我添加自己的贡献者并调用builder.withDetails(“git”),如下所示:

    package ca.cpp.api.submitapi.config
    
    import org.springframework.boot.actuate.info.Info
    import org.springframework.boot.actuate.info.InfoContributor
    import org.springframework.boot.info.GitProperties
    import org.springframework.stereotype.Component
    
    @Component
    class CustomGitInfoContributor(private val properties: GitProperties): InfoContributor {
        override fun contribute(builder: Info.Builder?) {
            builder?.withDetail("git",mapOf("dirty" to properties.get("dirty"))
        }
    }
    

    有没有一种合理的方法可以只添加我想要的元素,或者使用我自己的贡献者将其信息与“git”下已有的信息合并,或者通过某种方式扩展/替换现有的GitInfoContributor?

    1 回复  |  直到 6 年前
        1
  •  5
  •   balazs    6 年前

    在“git”部分下添加新元素的最简单方法是扩展GitInfoContributor

    @Component
    class CustomGitInfoContributor @Autowired
    constructor(properties: GitProperties) : GitInfoContributor(properties) {
    
        override fun contribute(builder: Info.Builder) {
            val map = generateContent()
            map["dirty"] = properties.get("dirty")
            builder.withDetail("git", map)
        }
    }
    

    爪哇语:

    @Component
    public class CustomGitInfoContributor extends GitInfoContributor {
    
      @Autowired
      public CustomGitInfoContributor(GitProperties properties) {
        super(properties);
      }
    
      @Override
      public void contribute(Info.Builder builder) {
        Map<String, Object> map = generateContent();
        map.put("dirty", getProperties().get("dirty"));
        builder.withDetail("git", map);
      }
    }
    

    此代码将在默认git信息之后添加脏部分,例如。 {"git":{"commit":{"time":"2018-11-03T15:22:51Z","id":"caa2ef0"},"branch":"master","dirty":"true"}}

    如果您不想生成默认的git信息部分,请简单地删除 generateContent()