【问题标题】:How to map Dropwizard admin servlet to a route on the public-facing port (8080)如何将 Dropwizard admin servlet 映射到公共端口 (8080) 上的路由
【发布时间】:2015-12-03 21:03:39
【问题描述】:

我使用的是现代 Dropwizard (0.9.1),它默认将您的资源映射到面向公众的端口 8080,然后将一个特殊的 Admin Servlet 映射到不同的端口(默认为 8081)。我不想将管理面板放在端口 8081 上,而是将其全部映射到路由 /admin,以便所有管理资源都可以在该路径上公开访问(8080/admin/healthcheck8080/admin/metrics 等)。我一直在梳理 Dropwizard 和 Jetty 的文档,但似乎无法弄清楚这一点。

我将此添加到配置文件中以尝试将普通应用程序和管理应用程序映射到同一个端口,但在应用程序启动时导致错误:

server:
  adminContextPath: /admin
  applicationConnectors:
    - type: http
      port: 8080
  adminConnectors:
    - type: http
      port: 8080

在应用程序入口点run 方法中,我可以像这样访问“管理上下文”,但我不确定要对对象做什么:

MutableServletContextHandler mut = environment.getAdminContext();
// get something from mut object?
environment.servlets().addServlet("admin", mut).addMapping("/admin");

想法?

【问题讨论】:

    标签: java servlets dropwizard


    【解决方案1】:

    我刚刚遇到了同样的问题(也在 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/*");
        }
    }
    

    我通过查看 dropwizard 如何在 AbstractServletFactory class 中设置管理 servlet 发现了这一点。

    我将pathSpec/* 更改为/admin/*,这样我仍然可以访问我的正常应用程序资源(例如MyResource)。

    现在,应该可以通过以下方式访问运行状况检查:http://localhost:8000/your-application/admin/healthcheck。 (请注意,整个 admin servlet 现在出现在 server.yml 中定义的 applicationContextPath 中,而不是 admin 中)。

    【讨论】:

    • 从 dropwizard 2.x 更新,这仍然有效,但由于 MetricsServlet 的模糊性,这里是 const 的 fqdn:com.codahale.metrics.servlets.MetricsServlet.METRICS_REGISTRY com.codahale.metrics.servlets.HealthCheckServlet.HEALTH_CHECK_REGISTRY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多