出于性能原因,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/