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

前言

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

1. demo

pom & main


        
            org.springframework.boot
            spring-boot-starter-web
            2.1.6.RELEASE
        
    


@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/"任意目录,即可加载

Spring Boot 静态资源不重启刷新,自定义配置_第1张图片

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

Spring Boot 静态资源不重启刷新,自定义配置_第2张图片

 

2. 如何不重启修改生效

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

Spring Boot 静态资源不重启刷新,自定义配置_第3张图片

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

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

Spring Boot 静态资源不重启刷新,自定义配置_第4张图片 每次修改后,右键,recompile即可,我已经修改了,来试试

Spring Boot 静态资源不重启刷新,自定义配置_第5张图片

生效了,?

3. 原理

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

Spring Boot 静态资源不重启刷新,自定义配置_第6张图片

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

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源码,试一下,一切都很简单。

 

你可能感兴趣的:(spring,boot)