【发布时间】:2023-03-29 23:20:02
【问题描述】:
我需要在 main 方法中从嵌入式码头代码中传递一个对象,以便在 servlet 中使用。
这是一个问题,因为 WebAppContext 中使用了单独的类加载器 - 否则我只会使用静态变量。
我的主要代码是这样设置的:
Server server = new Server();
// setup connectors here...
ContextHandlerCollection contexts = new ContextHandlerCollection();
RequestLogHandler requestLogHandler = new RequestLogHandler();
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[] { contexts, new DefaultHandler(), requestLogHandler });
server.setHandler(instrumentedHandler(handlers, metrics));
addRequestLogging(requestLogHandler);
DeploymentManager deploymentManager = new DeploymentManager();
deploymentManager.setContexts(contexts);
WebAppProvider webAppProvider = new WebAppProvider();
webAppProvider.setMonitoredDirName(jettyHome + "/webapps");
webAppProvider.setParentLoaderPriority(false);
webAppProvider.setExtractWars(true);
webAppProvider.setScanInterval(1);
webAppProvider.setDefaultsDescriptor(jettyHome + "/webdefault.xml");
webAppProvider.setConfigurationManager(new PropertiesConfigurationManager());
deploymentManager.addAppProvider(webAppProvider);
server.addBean(deploymentManager);
// Attempt to set the metrics on the server - but I can't access them in the Servlet
server.setAttribute(MetricRegistry.class.getName(), metrics);
server.start();
server.join();
我从question 中尝试了一些东西,但没有奏效。具体来说,servlet 上下文中没有设置org.eclipse.jetty.server.Server 属性。
(具体来说,我正在尝试在码头对象上设置 dropwizard 指标,但我的应用程序的其余部分需要相同的 MetricRegistry 对象,以便我可以将所有指标和报告器放在一起)
【问题讨论】: