不少人发现静态资源每次随着项目打成jar包,都会不断浪费时间,占用磁盘内存,而且随着时间推移,项目内会有很多大的静态资源,比如视频,音乐等等。
于是我忽然想到把静态资源提出来,昨天下午尝试了一下,没头绪,但是今天上午突然想起来了,下午便实现了这个功能。
1.首先,先在config包下添加一个新的类WebResource,需要继承WebMvcConfigurationSupport,代码如下:
@Configuration
public class WebResource extends WebMvcConfigurationSupport {
//对应application.yml配置文件里面的参数
@Value("${resource.windowsResources}")
private String resourcePathWindows;
@Value("${resource.linuxResources}")
private String resourcePathLinux;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//获得系统型号,注意,这里之所以获得是因为外面打代码,测试运行需要在Windows上面运行,而项目则一般发布在Linux。
String osName = System.getProperty("os.name");
//如果是Windows系统
if (osName.toLowerCase().startsWith("win")) {
registry.addResourceHandler("/resources/**").addResourceLocations("file:" + resourcePathWindows);
// /resources/**表示在磁盘filePathWindow目录下的所有资源会被解析为以下的路径
} else { //linux 和mac
registry.addResourceHandler("/resources/**").addResourceLocations("file:" + resourcePathLinux) ;
}
super.addResourceHandlers(registry);
}
}
2.接下来便需要在application.yml中编写如下:
resource:
## windows系统下访问路径
windowsResources: D:\java\
## linux系统下访问路径
linuxResources: /project/myserver/resources/
注意:Windows下文件路径是 X:\xxx\xxx\,而Linux下文件路径是/xxx/xxx/xxx/.
切记,最后一定是以“\” 或 “/”结尾,不能以文件名结尾。
3.配置已经完成,接下来就是应用。
列举一段之前引入的css代码:
<link rel="stylesheet" type="text/css" href="css/base.css" />
注意:我是spring boot整合的thymeleaf,springboot自动搜索templates包下的static文件夹
下面是配置后的引入:
<link rel="stylesheet" type="text/css" href="resources/static/css/base.css" />
不同:resources/static,这是之前的config配置代码中的一段:registry.addResourceHandler("/resources/**").addResourceLocations("file:" + resourcePathWindows);
resource就是自己定义的字符串,而static则是我把static(包含css)整个文件夹放在了 :D:\java\
## windows系统下访问路径
windowsResources: D:\java\
4.测试,成功则上传资源,发布项目!