Jetty监视器WAR文件并在更改时更新
问题描述:
我有一个嵌入式Jetty,运行时有几个不同的上下文,其中一个是WAR文件。我想让Jetty在战争文件发生变化时重新部署(可能是因为它是由另一个进程重建的)。Jetty监视器WAR文件并在更改时更新
我目前的配置:
ContextHandlerCollection handler = new ContextHandlerCollection();
WebAppContext webAppContext = new WebAppContext("../../webapp/ROOT.war", "/");
handler.setHandlers(new Handler[]{
new WebAppContext("src/main/webapp", "/api"),
webAppContext
});
Server server = new Server(8080);
server.setHandler(handler);
我如何改变它来观看并重新部署war文件(../../webapp/ROOT.war
)?
答
请勿直接使用WebAppContext
。使用DeploymentManager
查找并部署您的web应用程序。
ContextHandlerCollection contexts = new ContextHandlerCollection();
server.setHandler(contexts);
DeploymentManager deployer = new DeploymentManager();
deployer.setContexts(contexts);
deployer.setContextAttribute(
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/servlet-api-[^/]*\\.jar$");
WebAppProvider webapp_provider = new WebAppProvider();
// The directory to monitor for WAR + XML files
webapp_provider.setMonitoredDirName("/opt/jetty/webapps");
webapp_provider.setScanInterval(1); // how often to scan
webapp_provider.setExtractWars(true);
webapp_provider.setTempDir(new File("/opt/jetty/work"));
deployer.addAppProvider(webapp_provider);
server.addBean(deployer);
这适用于'.war',但不适用于映射到'/ api'的应用程序。但这是一个好的开始! – Jorn
它也适用于'/ api',你只需要在受监控的目录中设置一个可部署的XML。所述XML只是将一个“WebAppContext”配置为一个目录的路径,而不是一个war文件。 –