我正在从Jetty 8.1.17迁移到Jetty 9.3.9。我们的应用程序 嵌入 Jetty。以前我们有一个XML配置文件jetty.xml
,其中包含我们需要的所有内容。
我觉得使用Jetty 9.3.9,使用他们建议的模块化方法会更好,到目前为止,我有jetty.xml
,jetty-http.xml
,jetty-https.xml
和{{1在我的jetty-ssl.xml
;这些都是9.3.9发行版的副本。当我使用$JETTY_HOME/etc
而不是通过我自己的嵌入Jetty的代码时,这似乎很有效。
理想情况下,我希望能够扫描start.jar
文件夹中的任何jetty xml文件并加载配置。但是对于嵌入式模式,由于它们之间的$JETTY_HOME/etc
依赖性等,我没有明确定义应该加载这些文件的顺序,所以没有找到方法。
我的初步尝试基于How can I programmatically start a jetty server with multiple configuration files?,看起来像是:
<ref id="x"/>
但是,如果在final List<Object> configuredObjects = new ArrayList();
XmlConfiguration last = null;
for(final Path confFile : configFiles) {
logger.info("[loading jetty configuration : {}]", confFile.toString());
try(final InputStream is = Files.newInputStream(confFile)) {
final XmlConfiguration configuration = new XmlConfiguration(is);
if (last != null) {
configuration.getIdMap().putAll(last.getIdMap());
}
configuredObjects.add(configuration.configure());
last = configuration;
}
}
Server server = null;
// For all objects created by XmlConfigurations, start them if they are lifecycles.
for (final Object configuredObject : configuredObjects) {
if(configuredObject instanceof Server) {
server = (Server)configuredObject;
}
if (configuredObject instanceof LifeCycle) {
final LifeCycle lc = (LifeCycle)configuredObject;
if (!lc.isRunning()) {
lc.start();
}
}
}
之前加载jetty-https.xml
,或者我将jetty-ssl.xml
中的引用放入子配置jetty.xml
中的对象,我会在启动时获得例外尚未加载。
在我看来,当你打电话给jetty-blah.xml
时,Jetty设法做到这一点没问题,所以我想让Jetty不关心配置文件的解析顺序是什么?
答案 0 :(得分:0)
加载Jetty XML文件时,订单非常重要。
这是整个start.jar
及其模块系统的核心所在,拥有一组适当的属性,服务器类路径是正确的,并确保XML的正确加载顺序。
注意:它不可能同时加载
${jetty.home}/etc
中的所有内容,因为您会在常见技术的替代实现上遇到冲突(start.jar
也为您管理)