前后端一起打包发布

先排错


@EnableWebMvc 的使用问题




结论

Spring Boot 默认提供Spring MVC 自动配置,不需要使用@EnableWebMvc注解
如果需要配置MVC(拦截器、格式化、视图等) 请使用添加@Configuration并实现WebMvcConfigurer接口.不要添加@EnableWebMvc注解。
@EnableWebMvc 只能添加到一个@Configuration配置类上,用于导入Spring Web MVC configuration


使用访问 404 问题

Spring Boot在application文件中的配置失效
在Spring Boot的自定义配置类加上@EnableWebMvc后,发现自动配置的静态资源路径(classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)资源无法访问。
通过查看@EnableWebMvc的源码,可以发现该注解就是为了引入一个DelegatingWebMvcConfiguration 配置类,而DelegatingWebMvcConfiguration又继承于WebMvcConfigurationSupport。也就是说,如果我们使用@EnableWebMvc就相当于导入了WebMvcConfigurationSupport类,这个时候,Spring Boot的自动装配就不会发生了,我们能用的,只有WebMvcConfigurationSupport提供的若干个配置。其实不使用@EnableWebMvc注解也是可以实现配置Webmvc,只需要将配置类继承于WebMvcConfigurationSupport类即可。

当使用@EnableWebMvc时,加载的是WebMvcConfigurationSupport中的配置项。

当不使用@EnableWebMvc时,使用的是WebMvcAutoConfiguration引入的配置项。

static 文件

  • 先看自己的 target 文件是否有前端资源,有就不需要导出了
  • 还有访问前端的 index.html 看他是否有样式


前端打包

  • vue打包,亲测有效
可以修改vue.config.js文件里的publicPath修改为publicPath: './',
  • 这里使用的是 React, vue 的网上就比较多了


  1. 添加 "homepage": "."
"homepage": ".",

如何将springboot多模块项目打成一个jar包_docker


  1. .因为我这react项目有用到react-router-dom,因此要把所有BrowserRouter改成HashRouter(原因你们自己去查,我这就不多说了,这步不改的话打包后运行的项目路由没法正常跳转):

如何将springboot多模块项目打成一个jar包_MVC_02


  1. 打包
  • 复制所有的 build 文件夹下面的到 Java 的 static 下面
npm run build

如何将springboot多模块项目打成一个jar包_MVC_03

如何将springboot多模块项目打成一个jar包_docker_04


后端打包


  • 去掉 @EnableWebMvc
  • 去掉测试阶段,然后打包


如何将springboot多模块项目打成一个jar包_jar_05


服务器部署


  1. 记得更改前端请求后端的地址


  1. 使用 Dockerfile 部署单个


Dockerfile 的内容

FROM openjdk:8
 
COPY ./invigilate-0.0.1-SNAPSHOT.jar /root/ok.jar
CMD ["--server.port=8082"]
 
EXPOSE 8082
 
ENTRYPOINT ["java", "-jar", "/root/ok.jar"]

构建镜像

docker build -t ha .

运行镜像

docker run -it -p 8082:8082 ha