春天我们可以设计如下的休息网络服务。
@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的源代码,但是无法找到端点映射的根类。
有人可以帮忙吗?
答案 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
看看这篇文章,其中解释了如何自定义端点: