如何以编程方式在spring boot中向/ info端点添加内容?

时间:2014-05-26 06:27:09

标签: spring-boot

如何以编程方式在Spring Boot中向/info端点添加内容? documentation表示通过使用/health接口,HealthIndicator端点可以实现这一点。是否还有/info端点的东西?

我想在那里添加操作系统名称和版本以及其他运行时信息。

4 个答案:

答案 0 :(得分:26)

在Spring Boot 1.4中,您可以声明InfoContributer bean以使这更容易:

@Component
public class ExampleInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("example",
                Collections.singletonMap("key", "value"));
    }

}

有关详细信息,请参阅http://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/#production-ready-application-info-custom

答案 1 :(得分:9)

执行所需操作的一种方法(如果您需要显示完全自定义的属性)是声明一个InfoEndpoint类型的bean,它将覆盖默认值。

@Bean
public InfoEndpoint infoEndpoint() {
     final LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
     map.put("test", "value"); //put whatever other values you need here
     return new InfoEndpoint(map);
}

从上面的代码中可以看出,地图可以包含您需要的任何信息。

如果要显示的数据可以被环境检索而且不是自定义的,则不需要覆盖InfoEndpoint bean,但只需添加属性文件的属性即可。 info的前缀。评估OS名称的一个示例如下:

info.os = ${os.name}

在上面的代码中,Spring Boot会在返回/info端点中的属性之前评估右侧表达式。

最后需要注意的是,/env端点中已有大量环境信息

<强>更新

正如@shabinjo所指出的,在较新的Spring Boot版本中,没有InfoEndpoint构造函数接受映射。 但是,您可以使用以下代码段:

@Bean
public InfoEndpoint infoEndpoint() {
     final Map<String, Object> map = new LinkedHashMap<String, Object>();
     map.put("test", "value"); //put whatever other values you need here
     return new InfoEndpoint(new MapInfoContributor(map));
}

上面的代码将完全覆盖在/info中结束的默认信息。 要克服这个问题,可以添加以下bean

@Bean
public MapInfoContributor mapInfoContributor() {
    return new MapInfoContributor(new HashMap<String, Object>() {{
        put("test", "value");
    }});
}

答案 2 :(得分:8)

接受的答案实际上破坏了InfoEndpoint并且没有添加它。

我发现添加信息的一种方法是在@Configuration类中添加@Autowired方法,该方法会根据info.*约定添加额外的属性对环境。然后InfoEndpoint会在调用它时将其取出。

您可以执行以下操作:

@Autowired
public void setInfoProperties(ConfigurableEnvironment env) {
    /* These properties will show up in the Spring Boot Actuator /info endpoint */
    Properties props = new Properties();

    props.put("info.timeZone", ZoneId.systemDefault().toString());

    env.getPropertySources().addFirst(new PropertiesPropertySource("extra-info-props", props));
}

答案 3 :(得分:0)

应该可以在ApplicationListener中添加自定义PropertySource,以向环境添加自定义信息。*属性(请参阅此答案以获取示例:How to Override Spring-boot application.properties programmatically