我正在使用 Drowpizard 0.7.1,但很快可能会升级到 0.8.4。
有人知道如何将管理员资源添加到 Dropwizard 中,并在操作菜单中显示,就像下面的示例一样吗?
Operational Menu
Metrics
Ping
Threads
Healthcheck
CustomAdminXy
我正在使用 Drowpizard 0.7.1,但很快可能会升级到 0.8.4。
有人知道如何将管理员资源添加到 Dropwizard 中,并在操作菜单中显示,就像下面的示例一样吗?
Operational Menu
Metrics
Ping
Threads
Healthcheck
CustomAdminXy
ServerFactory
时,AdminServlet
也被创建了。也许可以扩展DefaultServerFactory
并覆盖createAdminServlet
来创建一个带有自定义链接的自定义Admin servlet...(然后您需要通过配置设置服务器工厂。)environment.admin().addServlet("custom-admin", new CustomAdminServlet())
.addMapping("/custom-admin");
可能也不是理想的选择。
使用Dropwizard版本0.9.1中的.addMapping("")
,可以在不与默认的"/*"
AdminServlet映射冲突的情况下覆盖菜单。
在应用程序中:
public void run(final NetworkModelApplicationConfiguration configuration, final Environment environment) {
environment.admin().addServlet("my-admin-menu", new MyAdminServlet()).addMapping("");
environment.admin().addServlet("my-admin-feature", new MyAdminFeatureServlet()).addMapping("/myAdminFeature");
}
public class MyAdminServlet extends HttpServlet {
private String serviceName;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
this.serviceName = config.getInitParameter("service-name");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getContextPath() + req.getServletPath();
resp.setStatus(200);
resp.setHeader("Cache-Control", "must-revalidate,no-cache,no-store");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
try {
String template = getResourceAsString("/admin.html", "UTF-8");
String serviceName = this.serviceName == null?"":" (" + this.serviceName + ")";
writer.println(MessageFormat.format(template, new Object[] { path, serviceName }));
} finally {
writer.close();
}
}
String getResourceAsString(String resource, String charSet) throws IOException {
InputStream in = this.getClass().getResourceAsStream(resource);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
return out.toString(charSet);
}
}
我的 /admin.html
资源看起来像这样:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Operational Menu{1}</title>
</head>
<body>
<h1>Operational Menu{1}</h1>
<ul>
<li><a href="{0}/metrics?pretty=true">Metrics</a></li>
<li><a href="{0}/ping">Ping</a></li>
<li><a href="{0}/threads">Threads</a></li>
<li><a href="{0}/healthcheck?pretty=true">Healthcheck</a></li>
<li><a href="{0}/myAdminFeature">My Admin Feature</a></li>
</ul>
</body>
</html>