当前位置: 首页 > 知识库问答 >
问题:

Spring Boot或Tomcat缓存静态资产,必须每次重新构建才能刷新

严易安
2023-03-14

Spring Boot或Tomcat将我的静态资产.js和.css文件缓存在开发环境中,我每次都必须Build->Build Project(在IntelliJ中)以获得刷新版本。

我尝试了这些应用程序属性,但它们不起作用。

spring.resources.cache-period=0
spring.resources.chain.cache=false
spring.resources.chain.html-application-cache=false
spring.resources.chain.strategy.content.enabled=false
spring.resources.chain.strategy.content.paths=/**

我尝试使用这个bean来配置Tomcat,但它并不奏效:

@Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected void postProcessContext(Context context) {
                final int cacheSize = 0;
                StandardRoot standardRoot = new StandardRoot(context);
                standardRoot.setCachingAllowed(false);
                standardRoot.setCacheMaxSize(cacheSize);
                context.setResources(standardRoot);    
            }
        };
        return tomcatFactory;
    }

在更改js和css文件时,我不想每次都进行Build Project,我甚至可以使用像BrowserSync这样的东西将更改自动应用到web页面,但为此,我需要Tomcat/Spring来为dev环境中的静态资产提供服务,而不需要单击Build Project。

该文档并没有真正的帮助,根据该文档,除了每次更改css或js文件时单击Build之外,没有其他方法。http://docs.spring.io/spring-boot/docs/current-snapshot/reference/htmlsingle/#howto-hotswapping

但我相信这应该是一件非常简单而且完全可以实现的事情,不是吗。

有什么想法我下一步该试什么吗?

共有1个答案

江光明
2023-03-14

这个没有缓存。在单独的文件夹(例如target)中生成项目时,会复制源文件(*.js*.css),并将它们发送到浏览器。Build Project按钮复制了这些文件,然后您会看到它们已经更改。

您可以在IntelliJ中启用自动生成项目选项,或者在更改后使用其他工具(如bower)复制文件。

 类似资料:
  • Glassfish 3.1.2,Mojarra 2.1.6,SSL已激活 也是一篇关于资源缓存的好文章。在我们的应用服务器中,SSL被激活。我们看到静态资源(图像、脚本、css)没有缓存。 下面是我的测试筛选器: 过期:确定。它是一个静态资源,不会改变,因此我们将到期日期设置在未来的一个月。 上次修改:不确定。我读到,将此设置为过去也会影响缓存 缓存控制:OK。允许安全缓存。安全影响? 此设置是否

  • 来自RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1 无缓存 如果 no-cache 指令未指定字段名称,则在未成功与源服务器重新验证之前,缓存不得使用响应来满足后续请求。这允许源服务器阻止缓存,即使缓存已配置为向客户端请求返回过时的响应。 因此,它指示代理重新验证所有响应。 将此与 必须重新验证 当

  • Metasploitable2 得到一个错误 Docker:守护进程的错误响应:冲突。容器名称“/mymet2”已被容器“0A545A9AE45D56909FE081B52F8F2DCAD524873EE4DE8E73A816D60BAD783852”使用。您必须删除(或重命名)该容器才能重用该名称。请参见“Docker run--帮助”。

  • 为优化站点性能,静态资源应该带有恰当的'Cache-Control'值与其他必要的头。配置一个ResourceHttpRequestHandler处理器服务静态资源请求不仅会读取文件的元数据并填充'Last-Modified'头的值,正确配置时'Cache-Control'头也会被填充。【这段翻得还不是很清晰】 你可以设置ResourceHttpRequestHandler上的cachePerio

  • 问题内容: 因此,我在应用程序中有一个按钮和一个edittext。当我单击按钮并在edittext中写一些东西时,textview改变了。除了一件事以外,一切都应按其应有的方式进行。我必须单击两次按钮才能使其正常工作(仅在我第一次打开活动时)。打开活动后的第一次,我按下按钮,但没有任何反应,此后它应能正常工作。 我已经对此进行了研究,据我所知,引起麻烦的是专注,但我尝试了几件事却没有任何效果。 按

  • vue2开发 需求是没间隔多上时间请获取一次token、token是10分钟有效、我需要在7分钟的时候刷新一次token、然后我使用的是setInterval()方法 没7分钟请求一次, 但是出现的问题是、页面刷线以后setInterval()方法又重新执行了一次、导致没有正常刷新token 如何解决setInterval页面刷新以后不再重新执行 或者利用其他方法