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


    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的缓存关闭,如下图所示:

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

    这样,再用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.打开设置,在这里,这个勾要打上

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

    就选第一个,Resgistry

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    MySql从一窍不通到入门(五)Sharding:分表、分库、分片和分区
    rac 关库 启库
    rac 配置dg完成版
    CRS添加、删除节点
    分区表性能窥测
    传入时间按月分区并创建每月表空间
    python to be linux daemon
    python to be Windows Daemon
    Shell数组相关操作
    Python操作PDF与Tiff文件
  • 原文地址:https://www.cnblogs.com/blog5277/p/9271882.html
Copyright © 2020-2023  润新知