Springboot静态文件不更新的解决办法,以及Springboot实现热部署

时间:2022-09-20 17:17:22

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

原文链接:https://www.cnblogs.com/blog5277/p/9271882.html

原文作者:博客园--曲高终和寡

最近在用Springboot写web项目的时候,遇到了一个问题:

前端页面写完以后,用Update classes and resources方式更新tomcat,没有用!必须完全重启.

这肯定不行,前端的小伙伴不干,调个样式就要等几秒,开发效率太慢了.

之前写Spring MVC项目的时候完全没有这样的问题,经过一阵摸索和百度,最后解决了这个问题,目前百度谷歌到的答案其实都不完整(甚至压根就是错的)

先说第一个问题:

更新html,css,js文件以后,为啥Update classes and resources不更新呢?因为我这里用了Springboot推荐的第一个web模板引擎--> thymeleaf

这里纯属个人猜测了:

因为万恶的资本主义,不懂国内墙里的情况,人家为了方便开发,Springboot启动的时候默认启动了一个服务:LiveReload

这东西干嘛用的呢,就是网页连刷新都不用刷新了,资源文件一更新直接显示在页面上了,美滋滋的

但是这个东西呢,需要去Chrome浏览器的插件商店装个插件...不*是没法装的...

所以在国外是个非常方便的东西,在国内就成了好多人用不了的不知名东西...

然后thymeleaf模板引擎默认开启了静态文件缓存,加快了访问速度,国外有LiveReload这个东西监听资源文件,可以实时更新了以后reload项目,显示在页面上,

但是国内没有啊,更新的静态文件就被thymeleaf缓存了,除非完全重启项目才能把项目缓存释放,否则就一直在缓存里面,就造成了不更新的现象了...

想用LiveReload的话,就去 菩提树下的杨过 大大的文章里面配吧,链接在下面(反正我是后端程序员我也用不到,跟我搭班的前端又不会*懒得给他整)

https://www.cnblogs.com/yjmyzz/p/use-devtools-of-spring-boot-framework.html

开始讲解决办法:

在application.yml(或者是你的配置文件里),把thymeleaf的缓存关闭,如下图所示:

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

可以看到,人家默认是true,选成false:(注意这里前面应该有个spring:,但是由于yml文件形式的格式这里没有,在第二层就不用spring,懂我意思就行了,用yml的话打个ca,就有代码提示,按下去就行了)

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

这样,再用Update classes and resources方式更新就能更新静态文件了.

再说第二个问题:

我在搜第一个问题的时候"springboot 静态文件(或者资源文件) 不更新"百度谷歌都给的莫名其妙的答案,就是我接下来要讲的热部署,然而这根本就不是解决问题的办法,并且他们给的还少了最关键的一步:)(这一步可能是用tomcat启动时候的最关键一步,用jar包的话可能确实不用,但是别人都没提)

1.修改pom.xml,在dependency那里引入热部署devtools的maven引用

     <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>

在下面的build-->plugins那里,把原来的springboot,maven的插件修改成这样:

       <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,肯定devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>

2.打开设置,在这里,这个勾要打上

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

3,Mac用户同时按下 shitf+option+command+/ ,windows用户的话,大概是 shift+ctrl+alt+/(我猜的,不敢保证,自己试一下),会弹出这个界面:

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

就选第一个,Resgistry

往下翻,找到这一条,打上勾,关闭(我这个是因为之前已经打过勾了才变蓝置顶的,没打过勾以前是白色的,跟c开头的一堆设置在一块的,往下翻翻找找看)

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

最重要的一步来了,Tomcat形式启动不用这一步根本没法热部署:

既然都接触到热部署了,那肯定知道这个页面是哪里,就是配置tomcat这里,这一条一定要改成这个

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

好,接下来要在application.yml(或者是你自己的配置文件里)配置热部署的触发规则了

我其实后端不怎么需要热部署,我写代码一下子写一天,功能都实现了再开debug统一调试(嘻嘻嘻,其实不推荐....),主要是给前端小伙伴用的,而这个devtool工具呢,又默认把前端设置成不会热部署了,如图:

Springboot静态文件不更新的解决办法,以及Springboot实现热部署

那么我们就得手动指定排除热部署的文件,替代掉它这里的默认路径,那么,一个静态文件更新就自动热部署的配置就是如下:(注意,devtools是spring的下一级)

devtools:
restart:
#热部署生效
enabled: true
#设置重启的目录
additional-paths: resources/**,static/**,templates/**
#该目录下的内容修改不重启
exclude: data/**

我排除了一个完全不存在的路径,就把默认的设置替换掉了,就可以热部署了

这里完全是按需设置啊,比如说想让Java文件更新就可以在addition-paths那里把java的路径配上,比如说可以设置trigger-file,必须修改这个文件,才会触发热部署等等,还有很多设置,可以自己去看devtools的文档

那么本次教程就到此结束了

Springboot静态文件不更新的解决办法,以及Springboot实现热部署的更多相关文章

  1. virtualBox 虚拟机下nginx设置不缓存静态文件不起作用解决办法

    最近开发的时候,调整js时会一直使用缓存文件,无法显示改动!nginx配置静态文件add_header Cache-Control no-cache;也不起作用,很苦恼! nginx配置代码:even ...

  2. Springboot数据库连接池报错的解决办法

    Springboot数据库连接池报错的解决办法 这个异常通常在Linux服务器上会发生,原因是Linux系统会主动断开一个长时间没有通信的连接 那么我们的问题就是:数据库连接池长时间处于间歇状态,导致 ...

  3. eclipse android 不会自动生成R&period;java文件和包的解决办法

    eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法   我的eclipse原来是好好的,什么问题都没有的,结果今天一打开新建一个android程序,发现工程里不会自动 ...

  4. Xamarin Android SDK无法更新的解决办法

    Xamarin Android SDK无法更新的解决办法   Xamarin Android SDK无法更新的解决办法,更新时候,提示警告信息:A folder failed to be moved. ...

  5. asp&period;net 未能写入输出文件--&OpenCurlyDoubleQuote;拒绝访问”的解决办法

      概述 将网部署在IIS 7 上,访问本地磁盘路径的时候,提示"**文件拒绝访问".   解决办法   将需要访问的文件夹赋于IIS_IUSRS完全控制的权限即可,不用添加NET ...

  6. eclipse中的js文件报错的解决办法

    在使用别人的项目的时候,导入到eclipse中发现js文件报错,解决办法是关闭eclipse的js校验功能. 三个步骤: 1. 右键点击项目->properties->Validation ...

  7. 关于错误 openssl&sol;ssl&period;h:没有那个文件或目录的解决办法

    原文链接:https://blog.csdn.net/kulala082/article/details/68484314 首先得安装openssl:sudo apt-get install open ...

  8. springboot打包成jar文件无法正常运行,解决办法已经找到

    1.用intellij idea 创建了一个springboot的项目,前期都运行的好好的,在ide中可以正常运行,但是打包成Jar运行却一直报错. 2.经过不懈探索,终于找到解决办法 3.首先,找到 ...

  9. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件&OpenCurlyDoubleQuote;libboost&lowbar;thread-vc140-mt-gd-1&lowbar;63&period;lib&OpenCurlyDoubleQuote;的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

随机推荐

  1. activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含义

    Number Of Consumers  消费者 这个是消费者端的消费者数量 Number Of Pending Messages 等待消费的消息 这个是当前未出队列的数量.可以理解为总接收数-总出队 ...

  2. Linux常用命令学习2---(文件搜索命令locate find、命令搜索命令whereis which、字符串搜索命令grep、帮助命令man)

     1.文件搜索命令:locate [文件名]    在后台数据库中按文件名搜索,搜索速度比find快,耗费资源更少    例子:locate test.txt,就会显示文件名包含 test.txt的所 ...

  3. 转使用chrome命令行:disable-web-security 实现浏览器跨域

    注意chrome 48 版本后此方法就不能用了 推荐一个新方式来实现本地跨域调试线上资源,搜索chrome插件 Allow-Control-Allow-Origin: *.https://chrome ...

  4. angularjs---&dollar;http&period;post发的数据,后台取不到

    我用$http.post(url, data). 后台用play框架,不知道为什么总是取不到data数据.如果直接用$.post(url, data); 就可以! 后台Play的一个action: 打 ...

  5. Javaweb监听器(2)

    属性监听器:ServletRequestAtttributeListener/HttpSeessionAttributeListener/ServletContextAttributeListener ...

  6. Tomcat目录下文件详解

    一.Tomcat背景   (转) 自从JSP发布之后,推出了各式各样的JSP引擎.Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供We ...

  7. django源码解析一&lpar;请求处理流程&rpar;

    1.我们都知道WSGI是一个规范,规范了server和application之间通信的一些约束,server端在监听到请求之后,会把请求转给application去处理,他们之间关联起来的桥梁是一个e ...

  8. Python Cookbook&lpar;第3版&rpar;中文版:15&period;15 C字符串转换为Python字符串

    15.15 C字符串转换为Python字符串¶ 问题¶ 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案¶ C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到 ...

  9. Spring系列&lpar;六&rpar; Spring Web MVC 应用构建分析

    DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配 ...

  10. org&period;springframework&period;jdbc&period;UncategorizedSQLException

    org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException fo ...