vivo软件开发马拉松大赛学习总结
- 后端技术
- 部署
- 使用到的docker镜像
- MySQL部署
- 后端项目部署
- jenkinsfile
- swagger配置
- 跨域解决
- 其他
后端技术
部署
后端部分是使用docker来进行部署的,部署在服务器的/home/vivo-backend/
目录下
使用到的docker镜像
- MySQL:5.7
- 基于openjdk:8构建的后端镜像
MySQL部署
MySQL部分文件部署在/home/vivo-backend/mysql/
目录下
- 在上述目录下创建一个版本为5.7的MySQL容器,取名为
c_mysql
- 端口映射为9712
- 挂载数据卷,在
/home/vivo-backend/mysql/
目录下存放MySQL的日志,配置,数据等信息 - 设置密码为
root
cd /home/vivo-backend/mysql/
docker run -id \
-p 9712:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
-
配置后测试能否远程连接上该数据库
-
远程在服务器的MySQL容器里新建一个名为
vivo-backend
的数据库,字符集选择使用utf8 -- UTF-8 Unicode
-
将在本机的数据库里的数据导出为sql文件,并远程移植到服务器的MySQL容器的数据库
vivo-backend
里 -
在服务器里通过如下指令,如果能查询到记录则部署MySQL成功
docker exec -it c_mysql bash mysql -uroot -proot #-p后面没有空格! use vivo-backend; show tables; select * from t_user;
后端项目部署
后端部分文件部署在/home/vivo-backend/backend/
目录下
- 往该目录上传有
Dockerfile
和vivo-backend.jar
,分别是docker制定镜像指令文件和后端项目的jar包。该目录下还有一个文件夹resources
,是用来挂载之后生成后端容器的数据的,后端生成的文件都会保存在这里
cd /
mkdir /home/vivo-backend
mkdir /home/vivo-backend/backend
mkdir /home/vivo-backend/backend/resources
- 进入
/home/vivo-backend/backend
目录,生成后端镜像,取名为fun
,版本是1.0
cd /home/vivo-backend/backend/
docker build -f ./Dockerfile -t fun:1.0 .
- 根据后端镜像创建容器,取名为
vivo-backend
,并挂载数据卷
- 容器和宿主机的端口号都是使用的9713
- 把容器里的文件挂载到
/home/vivo-backend/backend/resources/
目录下 - 生成容器即以守护进程形式在后台运行
docker run -id -p 9713:9713 --name=vivo-backend vivo:1.0
- 可以通过如下指令来查看数据卷是否挂载成功
cd /home/vivo-backend/backend/resources/
ls
docker exec -it backend bash
cd /usr/local/vivo-backend/resources/
ls
- 在浏览器访问 i p : {ip}: ip: p o r t {port} port/swagger-ui.html,如果能访问成功,则后端部署成功。同时该url也是后端项目的API文档,可以用于测试
jenkinsfile
这个因为环境没配好所以应该是错的
pipeline {agent anytools{maven 'maven_3.6.3'}stages {stage('拉取代码') {steps {git credentialsId: '8b4bb2a985c6acd7ef7ed4fd9df90db4ca6d7d2e', url: 'https://git.nju.edu.cn/vivo/vivo_backend.git'echo '拉取成功'}}stage('执行构建') {steps {cd /home/vivo-backend/backend/sh "mvn clean package"echo '构建完成'}}stage('把jar包构建为docker镜像并运行') {steps {# 停止容器docker stop vivo:1.0echo "删除容器"# 删除容器docker rm vivo:1.0# 删除镜像docker rmi vivo:1.0echo "打包镜像"# 打包镜像docker build -f ./Dockerfile -t vivo:1.0 .echo "运行镜像"# 运行镜像docker run -id -p 9713:8082 --name=vivo-backend vivo:1.0echo '运行成功'}}}
}
swagger配置
写个config即可
@Configuration
@EnableSwagger2
public class SwaggerConfig {}
跨域解决
@CrossOrigin好像没用
参考这篇,把方法三写在方法二就好了,原理待了解
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*")// 设置允许跨域请求的域名.allowedHeaders("*")// 设置允许的请求头.allowCredentials(true)// 是否允许证书.allowedMethods("*")// 允许的方法.maxAge(3600);// 跨域允许时间}@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);config.addAllowedOriginPattern("*");config.addAllowedHeader("*");config.addAllowedMethod("*");source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效return new CorsFilter(source);}}
其他
- 阿里云OSS:参考
https://www.cnblogs.com/pxblog/p/13402120.html
https://blog.csdn.net/weixin_45834777/article/details/116211468 - wrapper很好用,但xml自定义sql暂时还不会,参考:https://blog.csdn.net/qq_43413788/article/details/103080573
- VO里面不用写id
- update当然要传id,只传VO的话怎么改
- add的接口返回对应的id
- 返回数据给前端同学时最好返回java对象,然后会转换为字符串,这样通过key value可以知道数据是什么
- builder在构造方法里很好用,加个注解就行
- mybatis-plus的set好像有时候会失效,应该是我的原因x
- 25小时的马拉松大赛技术大家都大差不差,重点在创意和需求上,答辩要更加分析场景、用户等,用户没必要范围很大,瞄准一部分小群体也是可以的。创意上不要太虚也不要太实,炫酷的库还是要加,融入ai等元素,不然显得太传统。