spring boot执行器端点映射根类

时间:2016-09-29 09:27:51

标签: java spring spring-boot spring-boot-actuator

春天我们可以设计如下的休息网络服务。

@RestController
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printWelcome(ModelMap model) {
        model.addAttribute("message", "Hello");
        return "hello";
    }
}

当我们这样做时,@ RestController& @RequestMapping将在内部管理请求映射部分。因此,当我点击url即http://localhost:8080/hello时,它将指向printWelcome方法。

我正在研究弹簧启动执行器源代码。如果我们将在我们的应用程序中使用spring boot执行器,它将为我们提供一些端点,这些端点已作为健康,指标,信息等其他API公开。所以在我的应用程序中,如果我使用的是弹簧启动执行器,当我按下“localhost:8080 / health”这样的网址时,我会得到回应。

所以现在我的问题是在春季启动执行器源代码中,这些URL被映射。我已经调试了spring boot actuator的源代码,但是无法找到端点映射的根类。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

here它是,在AbstractEndpoint中它说

/**
     * Endpoint identifier. With HTTP monitoring the identifier of the endpoint is mapped
     * to a URL (e.g. 'foo' is mapped to '/foo').
     */

如果您看到HealthEndPoint它会扩展AbstractEndpoint并执行super("health", false);,那就是它映射到“localhost:8080 / health”的位置。

答案 1 :(得分:1)

所有spring-boot-actuator端点都扩展了AbstractEndpoint(在Health端口例中:#define SWAPPED(num) ((num>>8) | (num<<8)) struct trd_t { unsigned short length; // First 2 bytes in the input data char type; // next 1 byte char symbol[5]; // next 5 bytes unsigned short trd_size; // next 2 bytes uint64_t trd_price; // next 8 bytes }; __attribute((packed))__; // <--- EDIT: I tried this packed, but does not give right values either. main () { struct trd_t *trd; unsigned char *buffer; unsigned short len; unsigned char type; ... buffer = (unsigned char*) malloc(pkt_len); fread(buffer, pkt_len, 1 , fp) trd = (struct trd_t *) buffer; len = SWAPPED(trd->length); if (trd->type == 'T') { .... } ... ),其中construcor具有端点的id。

from datetime import datetime    

date1 = "Date: Sun, 24 Nov 2013 18:34:30 GMT"
date2 = "Expires: Sat, 23 Nov 2013 18:34:30 GMT"
format = "%a, %d %b %Y %H:%M:%S %Z"

if datetime.strptime(date1, "Date: " + format) >= datetime.strptime(date2, "Expires: " + format):
    print "Expired"

否则,它有一个invoke方法(从接口Endpoint)通过它调用端点。

class HealthEndpoint extends AbstractEndpoint<Health>

最后,此端点在类 /** * Endpoint identifier. With HTTP monitoring the identifier of the endpoint is mapped * to a URL (e.g. 'foo' is mapped to '/foo'). */ private String id; 中配置为/** * Called to invoke the endpoint. * @return the results of the invocation */ T invoke();

EndpointAutoConfiguration

看看这篇文章,其中解释了如何自定义端点: