在我是这样使用SpringBoot(WEB服务)简单的使用了一下静态文件。在static目录放入一张图片,在浏览器中访问图片。这里详细讲讲静态文件的使用。
如果一个项目作为API服务器,又作为一个WEB容器。SpringBoot是可以这么做的。现在我们已经完成的项目就是这样。前面我是这样使用SpringBoot(WEB服务)中使用了SpringBoot模版的访问,静态资源的访问。我在实际项目中没有用到模版,因为团队建设成前后端分离的,模版的访问需要通过服务端写控制器,前后端偶合有些大了。前后端分离之后,前端开发完成后提供的是静态页面文件。所以静态资源访问也是比较重要的。
在前面使用静态资源时,把图片放入/static目录中,打包部署后就可以访问了。这里就有个问题,改变静态资源都要打包项目,上传,重启项目。就显得很不合理。比如前端改了点东西,需要服务端做这么多工作,甚至服务端也正在开发下一版本中,开发没完成是否得先回滚到上一次发布的版本再更新到现在正在进行的工作。或者新版本开发复制代码进行。显然这样做后果很严重。
SpringBoot是可以在不重启服务的情况下更新静态资源文件的。下面来完成这项工作。
使用静态资源
SpringBoot对静态资源的寻找是根据配置的队列先后顺序查找的。它默认查找的目录有:/static,/public,/resources,/META-INF/resources。在前面我们将一张图片放在了static目录中,访问到了。下面是当前目录结构:
先启动项目访问http://localhost/001.jpg。
访问到了静态资源,这是之前已经完成的。
配置静态资源路径
如果要解决静态资源不随服务打包,那么静态资源要放到服务外的目录。我们先准备好这个目录,这里就放到到F:/test/下。在这个目录下放两张图片,文件名称分别是001.jpg和002.jpg
配置application-dev.yml(在不同的环境下目录可能不同,不配置在application.yml中)。增加spring.resources.static-locations的配置。注意目录前面的“file:”
custom:
name: bhhello-app-dev
spring:
resources:
static-locations: file:F:/test/
配置完成后重启项目,修改了配置文件需要重启项目才能生效。
启动完成后访问http://localhost/002.jpg,访问到F:/test/002.jpg了。
原路径
其实前面放资源文件时有个刻意做的准备,项目/static目录中放的是001.jpg,在F:/test/下放的也是001.jpg。资源名称是相同的。但是内容是不一样的。
访问下http://localhost/001.jpg,看下访问到哪个文件。结果是访问到外部的文件。
访问
接下来停止服务,在项目/static目录中放入名称为003.jpg的文件。启动服务。
访问http://localhost/003.jpg,看看结果。原来原来的路径已经失效了。
我们把原来的路径也追加到配置文件中,其实只需要把项目用使用的路径配置上去就可以了。配置文件修改如下:
custom:
name: bhhello-app-dev
spring:
resources:
static-locations: file:F:/test/, classpath:/static/, classpath:/public/, classpath:/resources/, classpath:/META-INF/resources
再访问http://localhost/003.jpg就可以访问到图片了。
现在再访问http://localhost/001.jpg会是哪个资源呢?结果是F:/test/下的资源
测试更新
现在在不重启服务的情况下,更换下F:/test/002.jpg文件,增加名称为004.jpg的图片。如下
分别访问http://localhost/002.jpg,http://localhost/003.jpg。注意,002.jpg可能会遇到浏览器缓存,如果访问结果还是原来的图片,可以试下清理浏览器缓存或者换个浏览器访问。