出于性能原因,Jetty默认缓存静态资源,如属性文件。例如,一些代码如下:
public class FrontServlet extends HttpServlet
{
private final Properties routes = new Properties();
@Override
public void init()
throws ServletException
{
try {
this.routes.load(this.getClass().getClassLoader().getResourceAsStream("routes.properties"));
} catch (IOException | NullPointerException e) {
throw new ServletException(e);
}
}
}
删除routes.properties
文件后,仍会继续工作,因为它仍然可以从缓存中获取,而不是从磁盘中获取。 The Eclipse Jetty plugin documentation还提到了这一点:查找“禁用服务器缓存”。
现在,我想在开发环境中禁用此功能以避免误报。 The Jetty documentation提到有一个名为maxCacheSize
的init参数,如果设置为0
,则禁用缓存。但是,我尝试了它作为上下文参数:
<context-param>
<param-name>org.eclipse.jetty.servlet.maxCacheSize</param-name>
<param-value>0</param-value>
</context-param>
并作为servlet init参数:
<servlet>
...
<init-param>
<param-name>org.eclipse.jetty.servlet.maxCacheSize</param-name>
<param-value>0</param-value>
</init-param>
</servlet>
无济于事。
有谁知道怎么做?
编辑:
即使我重新启动Web服务器以及正在运行的Vagrant虚拟机,仍然可以找到routes.properties
文件。我还应该提一下,我正在使用Maven Jetty plugin,因此使用mvn jetty:run
启动服务器。
答案 0 :(得分:2)
这与服务器缓存无关。
在Servlet上下文初始化期间加载routes.properties
一次,然后从那时开始使用。
只有破坏正在运行的上下文(即:重新启动Web服务器)才会再次调用FrontServlet.init()
。