我们有一个可以在其中运行嵌入式Jetty服务器的应用。
要求应用程序应运行服务器,稍后我们可以动态地动态部署新的WAR文件(无需API调用等)。
如果您使用非嵌入式版本,此行为非常简单-只需将WAR文件推送到webapp目录中,其余的工作就会完成,我正在尝试对嵌入式版本进行类似的操作。
到目前为止,我已经看到了一些建议:
Jetty 9 (embedded): Adding handlers during runtime-但它要求我编写cron来每x秒触发一次任务,然后扫描本地目录以查找更改,显然,我还必须检查是否删除和更新现有的WAR。听起来似乎并不复杂,但是我在Jetty中发现了一些应该完全做到这一点的类(请参阅选项2)
将DeploymentManager
类与ScanningAppProvider
一起使用,它们假定以固定的间隔扫描文件夹中的更改并相应地加载应用程序。
起初这听起来很有希望,但是我不确定如何将服务器绑定到Deployment Manager。关于它的文件似乎很少,而我真正要的是什么。我将在下面共享我的代码以提供一些上下文
公共类JettyServerDeploymentManager实现JettyServer {
private Server server;
public void start() throws Exception {
server = new Server(8090);
ServerConnector connector = new ServerConnector(server);
server.setConnectors(new Connector[] {connector});
DeploymentManager deploymentManager = new DeploymentManager();
AppProvider appProvider = appProvider();
appProvider.setDeploymentManager(deploymentManager);
deploymentManager.setAppProviders(Collections.singletonList(appProvider));
server.start();
server.join();
}
public AppProvider appProvider() throws IOException, URISyntaxException {
ScanningAppProvider appProvider = new ScanningAppProvider(filenameFilter()) {
public ContextHandler createContextHandler(App app) {
return null; // Still checking this part
}
};
appProvider.setScanInterval(1);
appProvider.setMonitoredDirResource(new PathResource(findWebAppPath()) {
});
return appProvider;
}
public FilenameFilter filenameFilter(){
return new FilenameFilter() {
public boolean accept(File dir, String name) {
return true; // Accept all files
}
};
}
private static URL findWebAppPath() {
ClassLoader classLoader = SparkApp.class.getClassLoader();
return classLoader.getResource("myapp");
}
}
我很高兴能获得一些指导,因为这是我第一次使用Jetty,第二种方法有效吗?似乎是我所需要的,但我不确定是否值得解决这个问题,就现在看来,编写cron任务与配置Deployment Manager相比听起来并不算复杂,但是我可能会遗漏一些东西
我还有2个更具体的问题:
a。在非嵌入式版本中,我可以在不提供上下文或处理程序的情况下加载Jetty服务器,为什么与嵌入式版本不一样? (上面的代码引发并出错-java.lang.NullPointerException:初始化DeploymentManager时,没有为App ...创建任何处理程序)。如果我想要一个不包含任何处理程序的嵌入式码头(就像非嵌入式版本一样)
b。在第二种方法中-如何将服务器绑定到DeploymentManager
?在任何一个对象上都没有设置server \ deployment-manager。