欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Springboot2.X 静态文件配置

程序员文章站 2022-07-07 10:39:34
...

一、应用场景

开发一个Springboot项目,项目中包含前后端代码。将项目打成jar运行后,发现需要定时更新的静态文件无法被正确修改(原因:以jar包形式运行项目,jar包中的静态文件不能被修改)。为了解决这个问题,可以采用两种方式:(1)打成war包,使用外部tomcat部署;(2)还是以jar包形式部署项目,通过Springboot的静态资源配置,设置一个可访问的外部静态资源目录。最后选择使用方式2解决此问题。

二、Springboot默认查找静态文件的顺序

Springboot 默认会挨个从 META/resources > resources > static > public 里面找是否存在相应的资源,如果有则直接返回

默认配置:

spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
步骤一:在 application.properties 中设置自己项目的静态资源路径
spring.resources.static-locations=classpath:/templates/,classpath:/static/,classpath:/public/
步骤二:新建 StaticFilePathConfig 配置文件,设置外部静态资源的访问路径

addResourceHandler方法是设置访问路径前缀addResourceLocations方法设置资源路径,如果你想指定外部的目录也很简单,直接addResourceLocations指定即可,代码如下:

String outside_static = "/opt/app/outside_static";
registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/templates/")
                .addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/public/")
                .addResourceLocations("file:" + outside_static); // 外部静态资源文件
@Configuration
public class StaticFilePathConfig implements WebMvcConfigurer {implements WebMvcConfigurer //extends WebMvcConfigurationSupport

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //如果是Windows环境的话 file:=改为=》file:///

        File path = null;
        try {
            path = new File(ResourceUtils.getURL("classpath:").getPath());
            //打印的结果 file:/DATA/app/mskyprocess/testmanagement-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!
            System.out.println(path.getPath());  
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // outside_templates前:file:/DATA/app/mskyprocess/
        String outside_templates=path.getParentFile().getParentFile().getParent()+File.separator;
        outside_templates=outside_templates.substring(5,outside_templates.length());
        // outside_templates后:/DATA/app/mskyprocess/
        System.out.println(outside_static);
        
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/templates/")
                .addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/public/")
                .addResourceLocations("file:" + outside_static);
    }
}
服务器上项目jar包和外部资源文件的位置图

Springboot2.X 静态文件配置

相关标签: Springboot