我试图在开发环境中提高Java Web应用程序的启动性能。它使用jetty-maven-plugin,import json
with open('stack.json','r') as f:
data = json.load(f)
questions=data["Question"]
topics=data['Topic']
print(questions)
print(topics)
用于启动应用程序。
我按照http://www.eclipse.org/jetty/documentation/9.3.x/jetty-classloading.html的说明注册了这个新的['what is this?', 'this is another question']
['Web pages', 'another topic']
。
mvn jetty:run
但是,CachingWebAppClassLoader
继续出现在jvisualvm CPU采样器中,而不是<Configure id="mywebapp" class="org.eclipse.jetty.webapp.WebAppContext">
...
<Set name="classLoader">
<New class="org.eclipse.jetty.webapp.CachingWebAppClassLoader">
<Arg><Ref refid="mywebapp"/></Arg>
</New>
</Set>
...
</Configure>
我验证了我的类加载器注册至少是通过提供无效的类名来发现的,在这种情况下抛出了org.eclipse.jetty.webapp.WebAppClassLoader.*
。我猜测我的类加载器配置正在消耗但没有被使用或类似的东西。有任何想法吗?
此外,如果您了解可用于提高性能的任何其他类加载器变体,请告诉我。
答案 0 :(得分:3)
Button btn = new Button("My Button");
btn.setIcon(myFontIcon);
btn.setPressedIcon(myAlternateColorFontIcon);
使用专门的WebAppContext,名为JettyWebAppContext:
JettyWebAppContext扩展WebAppContext以专门针对maven环境。
因此,jetty-maven-plugin
中的WebAppContext绑定已创建,但随后未使用。
一个明显的解决方法是将您的jetty.xml
类设置为jetty.xml中的WebApplicationContext
,
但不幸的是这does not work:
您可以在jetty.xml中定义资源处理程序,但是您可以 不应该在jetty.xml中定义你的webapp,作为jetty的目的 maven插件是通过自动部署使开发更容易 你未组装的webapp。所以,如果你把你的webapp定义 jetty.xml的东西应该工作。
另一种可能的解决方法是使用org.eclipse.jetty.maven.plugin.JettyWebAppContext
配置元素classLoader
在JettyWebAppContext
中的默认pom.xml
实例上设置webApp
属性:
<webApp>
<classLoader>org.eclipse.jetty.webapp.CachingWebAppClassLoader</classLoader>
</webApp>
不幸的是,由于CachingWebAppClassLoader
构造函数需要对基础WebAppClassLoader.Context
的引用,因此它也无法工作,因此无法实例化。
我不确定是否有任何其他解决方法(可能使用额外的here会这样做),但即使您设法使其与缓存类加载器一起使用,也可能打破变更检测和热重新部署,这基本上是jetty-maven-plugin
:
此目标在Maven项目中原位使用,无需首先要求将项目组装成战争,从而节省开发周期中的时间。
...
调用插件后,可以将插件配置为连续运行,扫描项目中的更改并自动执行 必要时进行热重新部署。这使得开发人员可以专注于使用他们选择的IDE对项目进行编码更改,并将这些更改立即透明地反映在正在运行的Web容器中,从而消除了在重建,重新组装和重新部署时浪费的开发时间。
所以我不确定这是不是一个好主意。