SpringBoot 如何实时刷新静态文件

作者:weixin_34129145 时间:2023-11-02 13:27:09 

你是否受够了每次修改静态文件都要重启服务器?

有时候在一些公司前后端的职责没有那么的明确,往往后台人员也要去写一些页面,像jsp页面,或者其他的后台模板页面等。默认情况下Java文件会被编译为class文件,并且静态资源文件也被一并的编译进class目录下面,这样导致我们每次修改静态文件都要重新编译进class目录,很麻烦,有没有什么简便的方案呢?

方案

Spring Boot在MVC中有个WebMvcProperties的配置类,还有个ResourceProperties资源配置类。

默认情况下Spring Boot从下面的目录下寻找静态资源文件


private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
           "classpath:/META-INF/resources/", "classpath:/resources/",
           "classpath:/static/", "classpath:/public/" };

默认的静态资源路径匹配为/**。

修改Spring Boot配置,注意static-locations为静态资源在自己电脑中的绝对路径配置


spirng
 resources:
   chain:
     cache: false
   static-locations: file:///Users/aihe/Desktop/taqu/ticket-system/src/main/resources/static/,file:///Users/aihe/Desktop/taqu/ticket-system/src/main/resources/
 mvc:
   static-path-pattern: /static/**

以后再修改静态文件的时候,js,html,css等即可立即生效,也不需要热部署的插件什么的。算是一个小tip吧~

SpringBoot静态资源不重启刷新,自定义配置

经常做Spring Boot开发,有很多时候不需要前后端分离,比如后管系统。开发的时候每次修改页面就需要重启,极度不方便。其实Spring Boot设计是不需要重启的,只是我们没注意用法而已。

1. demo

pom & main


<dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <version>2.1.6.RELEASE</version>
       </dependency>
   </dependencies>  

@SpringBootApplication
public class BootMain {
   public static void main(String[] args) {
       SpringApplication.run(BootMain.class, args);
   }
}

静态资源文件,查询官方docs文档放在"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"任意目录,即可加载

SpringBoot 如何实时刷新静态文件

启动main,访问http://localhost:8082/index.html,笔者自定义了端口

SpringBoot 如何实时刷新静态文件

2. 如何不重启修改生效

其实很简单,Spring Boot生效的目录在target目录,并非我们的resource目录

SpringBoot 如何实时刷新静态文件

Spring Boot只认target,我们修改的resources怎么会自动编译target呢,所以要重启了!?

解决方法有很多,常见的有mvn compile即可,或者自动编译(不推荐,因为资源文件,java也会编译),其实有一种非常简单的方法

SpringBoot 如何实时刷新静态文件

每次修改后,右键,recompile即可,我已经修改了,来试试

SpringBoot 如何实时刷新静态文件

生效了,?

3. 原理

了解原理有利于我们自定义Spring Boot,从根源上来使用它

SpringBoot 如何实时刷新静态文件

可以看到,静态资源加载的代码是


registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/")

里面的参数请自动忽略,因为我们可以自定义

这是为什么很多教程说自定义这个方法即可,不重启刷新静态资源,因为教程是指定了资源文件的路径,编译后的路径就是资源路径

常用的自定义spring.mvc.staticPathPattern = "/**",默认/**,配置pattern,url的路径参数


@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
   private String staticPathPattern = "/**";

spring.resources.staticLocations = classpath:/html/,默认如下,这是Spring Boot默认配置的的路径


@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
/**
* Locations of static resources. Defaults to classpath:[/META-INF/resources/,
* /resources/, /static/, /public/].
*/
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;

小结一下

遇到很多问题,不能人云亦云,百度啥的,其实很简单,看一下Spring源码,试一下,一切都很简单。以上为个人经验,希望能给大家一个参考。

来源:https://blog.csdn.net/weixin_34129145/article/details/89579952

标签:SpringBoot,刷新,静态文件
0
投稿

猜你喜欢

  • spring如何实现两个xml配置文件间的互调

    2021-06-07 20:50:15
  • Mybatis-plus多数据源配置的两种方式总结

    2023-07-24 05:22:48
  • 基于Java8 Stream API实现数据抽取收集

    2021-10-01 03:13:03
  • java随机生成8位数授权码的实例

    2022-04-24 12:03:47
  • Java开发者就业需要掌握的9大专业技能

    2021-11-13 12:01:54
  • SpringSecurity+Redis认证过程小结

    2021-07-21 11:38:11
  • Java中的vector类使用示例小结

    2023-09-01 02:46:59
  • Android组件TabHost实现页面中多个选项卡切换效果

    2023-03-05 22:07:35
  • Android中ActionBar以及menu的代码设置样式

    2023-11-24 03:34:33
  • C++ boost scoped_ptr智能指针详解

    2023-10-04 19:11:45
  • java实现人工智能化屏幕监控窗口

    2022-09-16 18:09:19
  • java入门概念个人理解之package与import浅析

    2021-07-09 10:18:55
  • IntelliJ IDEA 好用插件之analyze inspect code详解

    2021-09-26 22:16:36
  • C#调用C++DLL传递结构体数组的终极解决方案

    2022-05-31 09:54:30
  • 浅谈springBoot注解大全

    2023-11-09 15:02:56
  • Springboot下swagger-ui.html访问不到的解决方案

    2022-08-20 20:52:22
  • 浅谈JSON的数据交换、缓存问题和同步问题

    2021-08-08 09:31:25
  • Java ForkJoin框架的原理及用法

    2022-03-13 05:26:51
  • JavaWeb通过IDEA配置Servlet操作流程详解

    2023-10-09 09:26:23
  • winform 实现选择文件和选择文件夹对话框的简单实例

    2022-02-21 07:05:12
  • asp之家 软件编程 m.aspxhome.com