> 文章列表 > 配置springboot的静态资源访问地址为本机,并使用docker部署

配置springboot的静态资源访问地址为本机,并使用docker部署

配置springboot的静态资源访问地址为本机,并使用docker部署

  1. springboot版本 2.7.4
  2. 开发工具 IDEA 2021.2.4

1. SpringBoot提供的默认静态资源访问方法

resouces目录下的

/static、 /public、 /resouces、 /META-INF/resouces、

这四个目录下放置的静态资源都可以通过直接通过以下链接访问

http://localhost:8080/aaa.png

配置springboot的静态资源访问地址为本机,并使用docker部署

2. 将SpringBoot静态资源访问路径配置到本机地址

一般我们都要将程序打包部署到服务器上,可能并不想使用springboot提供的默认的静态资源目录,想将服务的某个目录设为静态资源目录,如服务器的 /root/abc/static,可以进行如下配置

2.1 在配置文件中(application.yml文件)填写的路径和访问前缀

save-path 和 mapping-path 中最后的 / 一定不能少!

image:save-path: /root/static/ # 图片存储路径mapping-path: /img/ # 图片的 RequestMapping 的路径

save-path 和 mapping-path 中最后的 / 一定不能少!(在啰嗦一遍)
mapping-path 指的是最后通过url访问静态资源的时候所需要加的前缀
例如
http://localhost:8080/img/aaa.png

2.2 更改springboot拦截器

在以下位置创建java文件(文件位置其实是可以任意的)
配置springboot的静态资源访问地址为本机,并使用docker部署

MyWebAppConfiguration文件

package com.atguigu.mybatisplus.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class MyWebAppConfiguration implements WebMvcConfigurer {
//    @Value("${upload.file.location}")
//    private String fileLocation;
//    @Value("${upload.file.path}")
//    private String filePath;@Value("${image.save-path}")private String imageSavePath;/*图标映射路径*/@Value("${image.mapping-path}")private String imageMappingPath;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(imageMappingPath + "").addResourceLocations("file:" + imageSavePath);}}

2.3 配置文件上传接口

@Controller
@RestController
@RequestMapping("/mybatisplus/user")
public class UserController {/* 图片存储路径 */@Value("${image.save-path}")private String imageSavePath;/* 图片映射路径 */@Value("${image.mapping-path}")private String imageMappingPath;@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile fileUpload) {//获取文件名String fileName = fileUpload.getOriginalFilename();//获取文件后缀名。也可以在这里添加判断语句,规定特定格式的图片才能上传,否则拒绝保存。String suffixName = fileName.substring(fileName.lastIndexOf("."));//为了避免发生图片替换,这里使用了文件名重新生成fileName = UUID.randomUUID() + suffixName;try {// 将图片保存到文件夹里fileUpload.transferTo(new File(imageSavePath + fileName));// 返回文件 Mapping 路径,使用 http://IP:端口/下面返回的路径 ,即可在网页中查看图片return imageMappingPath + fileName;} catch (Exception e) {e.printStackTrace();return null;}}}

3.将项目部署到服务器的docker中

配置springboot的静态资源访问地址为本机,并使用docker部署
docker本身也可以理解成是运行在服务器上的服务器(如上图所示),它在运行时有自己的内部环境,若将静态资源直接放在docker中,那么存储在docker中的资源会随着容器的销毁而销毁,因此需要进行docker的文件映射,将docker的 /root/static 映射到服务器的 /root/abc/static中, 相当于创建了一个共享文件夹,这样当容器销毁时,里面的文件依然会在 本机的 /root/abc/static中保留。

关于docker的静态资源映射,可以在创建容器的时候进行设置

docker-compose.yml文件

version: '2'
services:xz-platform:build:context: .restart: alwaysports:- 10204:8080volumes:- /root/xz-platform/static:/root/static  # 在这里做的映射,前面的地址是本机地址,后面的地址是容器的地址,顺序不要弄混container_name: xz-platformhostname: xz-platformimage: xz-platform

PS:

  1. 容器内部的 /root/static文件夹是默认存在的,不需要进入手动创建
  2. 进入运行springboot项目的容器内部的指令为
docker exec -it 容器id sh

使用

docker exec -it 容器id bash

docker exec -it 容器id /bin/bash

都是不行的