前后端一起打包发布
先排错
@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 的网上就比较多了
- 添加 "homepage": "."
"homepage": ".",
- .因为我这react项目有用到react-router-dom,因此要把所有BrowserRouter改成HashRouter(原因你们自己去查,我这就不多说了,这步不改的话打包后运行的项目路由没法正常跳转):
- 打包
- 复制所有的 build 文件夹下面的到 Java 的 static 下面
npm run build
后端打包
- 去掉 @EnableWebMvc
- 去掉测试阶段,然后打包
服务器部署
- 记得更改前端请求后端的地址
- 使用 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