是否可以自定义Dropwizrd的健康检查输出,例如:/health
用于健康检查而不是/healthcheck
,有些输出如{“status”: 200}
。
我意识到我可以简单地编写一个可以满足我所需要的新资源,我只是想知道是否有更标准的方法来实现这一点。
答案 0 :(得分:4)
根据我在0.7.1源代码中所读到的内容,不幸的是,不可能更改healthchecks的资源URI,我非常怀疑你是否可以更改healthcheck格式。我还记得人们抱怨无法将REST资源添加到管理页面,只有servlet。也许在0.8.0?
以下是我到目前为止在源代码中跟踪的详细信息。也许我误解或误解了某些东西,所以有人可以解决它。
Metrics实际编写了AdminServlet来添加healtcheck servlet,以便检查servlet配置是否定义了URI。
this.healthcheckUri = getParam(config.getInitParameter(HEALTHCHECK_URI_PARAM_KEY), DEFAULT_HEALTHCHECK_URI);
但是dropwizard没有提供在AbstractServerFactory上以任何方式注入此配置的方法。
handler.addServlet(new NonblockingServletHolder(new AdminServlet()), "/*");
NonblockingServletHolder是为AdminServlet
提供配置但由AbstractServerFactory
创建的空构造函数,并且无法更改配置。
我已经想到并试图从Environment
方法上的Application.run
对象访问ServletHolder,但是在运行run
方法之后才会创建admin servlet。
environment.getAdminContext().getServletHandler().getServlets()[0].setInitParameter("healthcheck-uri", "/health");
答案 1 :(得分:1)
run()
函数中的此类内容将帮助您控制健康检查的URI:
environment.servlets().addServlet(
"HealthCheckServlet",
new HealthCheckServlet(environment.healthChecks())
).addMapping("/health");
如果您想要实际控制返回的内容,则需要编写自己的资源文件。从注册表中获取所有健康检查,运行它们并根据结果返回您想要的任何聚合值。