Spring Boot信息端点中的自定义信息

2023/05/11

1. 概述

在这篇快速文章中,我们将了解如何自定义Spring Boot Actuators的/info端点。

请参阅本文以了解有关Boot中的Actuator以及如何配置它们的更多信息。

2. /info中的静态属性

如果我们有一些静态信息,例如应用程序的名称或长时间不变的版本,那么最好将这些详细信息添加到我们的application.properties文件中:

## Configuring info endpoint
info.app.name=Spring Sample Application
info.app.description=This is my first Spring Boot application
info.app.version=1.0.0

这就是我们在/info端点上提供此数据所需做的全部工作,Spring会自动将所有以info为前缀的属性添加到/info端点:

{
    "app": {
        "description": "This is my first Spring Boot application",
        "version": "1.0.0",
        "name": "Spring Sample Application"
    }
}

3. /info中的环境变量

现在让我们在/info端点中公开一个环境变量:

info.java-vendor=${java.specification.vendor}

这会将Java供应商公开给我们的/info端点:

{
    "app": {
        "description": "This is my first Spring Boot application",
        "version": "1.0.0",
        "name": "Spring Sample Application"
    },
    "java-vendor": "Oracle Corporation"
}

请注意,所有环境变量都已在/env端点上可用。但是,同样可以在/info端点上快速公开相同的内容。

4. 来自持久层的自定义数据

现在让我们更进一步,从持久性存储中公开一些有用的数据。

为此,我们需要实现InfoContributor接口并重写contribute()方法:

@Component
public class TotalUsersInfoContributor implements InfoContributor {

    @Autowired
    UserRepository userRepository;

    @Override
    public void contribute(Info.Builder builder) {
        Map<String, Integer> userDetails = new HashMap<>();
        userDetails.put("active", userRepository.countByStatus(1));
        userDetails.put("inactive", userRepository.countByStatus(0));

        builder.withDetail("users", userDetails);
    }
}

第一件事是我们需要将实现类标记为@Component,然后将所需的详细信息添加到提供给contribute()方法的Info.Builder实例。

这种方法为我们提供了很多关于我们可以向/info端点公开的内容的灵活性:

{
    ...other /info data...,
    ...
    "users": {
        "inactive": 2,
        "active": 3
    }
}

5. 总结

在本教程中,我们介绍了将自定义数据添加到/info端点的各种方法。

请注意,在另一篇文章中我们还讨论了如何将git信息添加到/info端点。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章