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

标签 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 的初始化参数,如果设置为 0,则会禁用缓存。但是,我尝试将它作为上下文参数:

<context-param>
    <param-name>org.eclipse.jetty.servlet.maxCacheSize</param-name>
    <param-value>0</param-value>
</context-param>

并作为 servlet 初始化参数:

<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 启动服务器。

最佳答案

这与服务器缓存无关。

routes.properties 在 Servlet 上下文初始化期间加载一次,并从此开始使用。

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

关于java - 如何在 Jetty 中禁用服务器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679872/

相关文章:

algorithm - 优化任务执行顺序

C: 处理 `cd ..` 和服务器应用程序上的其他命令并返回反馈给客户端

mysql - Django Mysql循环查询但得到相同的输出

java - 返回 CompletableFuture 的 Spring Transactional 方法

java - 如何设计java的基本框架来测试包含10万条记录的制表符分隔的文本文件

java - 右键单击 PrimeFaces 数据表更新选择

iphone - ipad 和 iphone 的 ios 缓存限制

linux - 配置我的 Web 服务器以将单独的文件夹公开为单独的 Web 服务器?

mysql - 安装期间出错 - 数据库初始化失败

java - URI 中的百分比编码