Mat*_*kas 3 java servlets dropwizard
我正在使用现代 Dropwizard (0.9.1),它默认将您的资源映射到面向公众的端口 8080,然后将特殊的 Admin Servlet 映射到不同的端口(默认为 8081)。而不必在端口8081管理员控制台,我想这一切映射到路径/admin,使所有管理资源是路径(在公开访问8080/admin/healthcheck,8080/admin/metrics等等)。我一直在梳理 Dropwizard 和 Jetty 的文档,但似乎无法弄清楚这一点。
我将此添加到配置文件中,以尝试将普通应用程序和管理应用程序映射到同一端口,但在应用程序启动时导致错误:
server:
adminContextPath: /admin
applicationConnectors:
- type: http
port: 8080
adminConnectors:
- type: http
port: 8080
Run Code Online (Sandbox Code Playgroud)
在应用程序入口点run方法中,我可以像这样访问“管理上下文”,但我不确定如何对对象执行此操作:
MutableServletContextHandler mut = environment.getAdminContext();
// get something from mut object?
environment.servlets().addServlet("admin", mut).addMapping("/admin");
Run Code Online (Sandbox Code Playgroud)
想法?
我刚刚遇到了同样的问题(也在 Dropwizard 0.9.1 上),我想我已经解决了:
public class YourApplication extends Application<YourConfiguration> {
// ...
@Override
public void run(YourConfiguration configuration, Environment environment) throws Exception {
environment.jersey().register(new MyResource());
environment.getApplicationContext().setAttribute(
MetricsServlet.METRICS_REGISTRY,
environment.metrics());
environment.getApplicationContext().setAttribute(
HealthCheckServlet.HEALTH_CHECK_REGISTRY,
environment.healthChecks());
environment.getApplicationContext().addServlet(
new NonblockingServletHolder(new AdminServlet()), "/admin/*");
}
}
Run Code Online (Sandbox Code Playgroud)
我通过查看 dropwizard 如何在AbstractServletFactory 类中设置管理 servlet 发现了这一点。
我将pathSpecfrom更改/*为/admin/*以便我仍然可以访问我的正常应用程序资源(例如MyResource)。
现在,健康检查应通过访问:http://localhost:8000/your-application/admin/healthcheck。(请注意,整个 admin servlet 现在出现applicationContextPath在您的 server.yml 中定义的中,而不是 admin 中)。
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |