如何在Jetty中禁用服务器缓存

时间:2017-03-08 19:08:26

标签: java caching server jetty

出于性能原因,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启动服务器。

1 个答案:

答案 0 :(得分:2)

这与服务器缓存无关。

在Servlet上下文初始化期间加载routes.properties一次,然后从那时开始使用。

只有破坏正在运行的上下文(即:重新启动Web服务器)才会再次调用FrontServlet.init()