vivo软件开发马拉松大赛学习总结

news/2024/11/25 18:55:58/

vivo软件开发马拉松大赛学习总结

  • 后端技术
    • 部署
      • 使用到的docker镜像
      • MySQL部署
      • 后端项目部署
      • jenkinsfile
    • swagger配置
    • 跨域解决
  • 其他

后端技术

部署

后端部分是使用docker来进行部署的,部署在服务器的/home/vivo-backend/目录下


使用到的docker镜像

  • MySQL:5.7
  • 基于openjdk:8构建的后端镜像

MySQL部署

MySQL部分文件部署在/home/vivo-backend/mysql/目录下

  1. 在上述目录下创建一个版本为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
  1. 配置后测试能否远程连接上该数据库

  2. 远程在服务器的MySQL容器里新建一个名为vivo-backend 的数据库,字符集选择使用utf8 -- UTF-8 Unicode

  3. 将在本机的数据库里的数据导出为sql文件,并远程移植到服务器的MySQL容器的数据库vivo-backend

  4. 在服务器里通过如下指令,如果能查询到记录则部署MySQL成功

    docker exec -it c_mysql bash
    mysql -uroot -proot #-p后面没有空格!
    use vivo-backend;
    show tables;
    select * from t_user;
    

后端项目部署

后端部分文件部署在/home/vivo-backend/backend/目录下

  1. 往该目录上传有Dockerfilevivo-backend.jar,分别是docker制定镜像指令文件和后端项目的jar包。该目录下还有一个文件夹resources,是用来挂载之后生成后端容器的数据的,后端生成的文件都会保存在这里
cd / 
mkdir /home/vivo-backend
mkdir /home/vivo-backend/backend
mkdir /home/vivo-backend/backend/resources
  1. 进入/home/vivo-backend/backend目录,生成后端镜像,取名为fun ,版本是1.0
cd /home/vivo-backend/backend/
docker build -f ./Dockerfile -t fun:1.0 .
  1. 根据后端镜像创建容器,取名为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
  1. 在浏览器访问 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);}}

其他

  1. 阿里云OSS:参考
    https://www.cnblogs.com/pxblog/p/13402120.html
    https://blog.csdn.net/weixin_45834777/article/details/116211468
  2. wrapper很好用,但xml自定义sql暂时还不会,参考:https://blog.csdn.net/qq_43413788/article/details/103080573
  3. VO里面不用写id
  4. update当然要传id,只传VO的话怎么改
  5. add的接口返回对应的id
  6. 返回数据给前端同学时最好返回java对象,然后会转换为字符串,这样通过key value可以知道数据是什么
  7. builder在构造方法里很好用,加个注解就行
  8. mybatis-plus的set好像有时候会失效,应该是我的原因x
  9. 25小时的马拉松大赛技术大家都大差不差,重点在创意和需求上,答辩要更加分析场景、用户等,用户没必要范围很大,瞄准一部分小群体也是可以的。创意上不要太虚也不要太实,炫酷的库还是要加,融入ai等元素,不然显得太传统。

http://www.ppmy.cn/news/94639.html

相关文章

深度学习编译器

1.为什么需要深度学习编译器 深度学习编译器主要为解决不同框架下训练的模型部署到指定的某些设备上时所遇到的一系列复杂的问题,即将各种深度学习训练框架的模型部署到各种硬件所面临的问题; 首先深度学习领域,从训练框架看,当前…

从零开始:使用低代码平台开发OA系统的教程

随着中小型企业持续拥抱数字化转型,对支持业务流程的定制软件应用程序的需求增加。而办公自动化(OA)系统是一个有助于自动执行重复性任务并简化工作流程的系统。按照传统的开发模式,开发OA系统可能既耗时又昂贵,需要经验丰富的开发人员从头开…

使用python批量重命名文件夹中的文件

目录 一、前言 二、Python重命名文件的方法 三、Python重命名文件夹内的所有图片 四、Python重命名文件夹内的所有图片并按照顺序排序 五、总结 一、前言 在日常工作中,我们经常需要对文件进行重命名,比如将一些图片按照顺序重命名,方便…

window 利用Qt-windeployqt打包exe程序 一个简单的实例

用一个简单的实例展示下window 如何使用QT-windeployqt打包exe程序使得其可以在别的电脑上运行 一、release模式获得exe可执行文件 新建一个QT项目 构建选择使用CMake base class选择QMainWindow Kit Selection一定要注意,我选的是MinGW 32-bit UI设计 mainwindow.…

Qt, Text Edit 和 Plain Text Edit关于调整字体样式的问题

问题: 在编写小案例的过程中需要使用一个文本容器用于显示文本效果, 因为涉及文本字体的 加粗, 倾斜, 下划线, 以及颜色效果, 这里使用了 Text Edit 组件, 但是使用后发现容器中的文本无法实现同时设置 加粗 倾斜 下划线的情况, 且单独设置时只有 下划线 有效果, 加粗 倾斜 均无…

Systrace系列12 —— CPU Info 解读

本文主要是对 Systrace 中的 CPU 信息区域(Kernel)进行简单介绍,简单介绍了如何在 Systrace 中查看 Kernel 模块输出的 CPU 相关的信息,了解 CPU 频率、调度、锁频、锁核相关的信息。 CPU 区域图例 下面是高通骁龙 845 手机 Systrace 对应的 Kernel 中的 CPU Info 区域(底下…

【树上差分+LCA】篮球杯 砍树

省赛的题现在来补 感觉什么都不会,已经要没了 题意: 思路: 考虑一条边,两端有两棵子树 有这样的性质: 这条边两端的结点的经过次数M 因此每加一个点对,都对其路径1 s[u]M时,与该点连着的…

一文会用断码屏

断码屏的使用 1、断码屏显示文字原理 我理解应该是偏压原理达到显示效果的。 LCD驱动分为A型、B型,如果LCD偏压类型为C型,固定为 1/3 偏压。 由数据手册得知,以下: LCD 驱动器提供的 COM 和 SEG 输出数目,以及偏压…