文章目录
- 1. 项目入门
- 1.1 软件开发整体介绍
- 1.2 项目介绍
- 1.3 开发环境搭建
- 1.3.1 前端环境搭建
- 1.3.2 后端环境搭建
- 1.3.3 登录功能完善
- 1.3.4 前后端分离开发流程
- 1.4 导入接口文档
- 1.5 Swagger
- 介绍
- 使用方式
- Swagger常用注解
- 1.6 注意事项
1. 项目入门
1.1 软件开发整体介绍
软件开发流程
- 需求分析
- 需求规格说明、产品原型
- 设计
- UI设计、数据库设计、接口设计
- 编码
- 项目代码、单元测试
- 测试
- 测试用例、测试报告
- 上线运维
- 软件环境安装、配置
角色分工
- 项目经理
- 对整个项目负责,任务分配、把控进度
- 产品经理
- 进行需求调研,输出需求调研文档、产品原型等
- UI设计师
- 根据产品原型输出界面效果图
- 架构师
- 项目整体架构设计、技术选型等
- 开发工程师
- 代码实现
- 测试工程师
- 编写测试用例,输出测试报告
- 运维工程师
- 软件环境搭建、项目上线
软件环境
- 开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问
- 测试环境(testing):专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问
- 生产环境(production):线上环境,正式提供对外服务的环境
1.2 项目介绍
专为餐饮企业定制的一款软件产品
技术选型
1.3 开发环境搭建
1.3.1 前端环境搭建
1.3.2 后端环境搭建
熟悉项目结构
- sky-common
- 子模块中存放的是一些公共类,可以供其他模块使用。
- sky-pojo
- 子模块中存放的是一些entity(实体类)、DTO(接收前端的数据)、VO(返回给前端的数据)。
- sky-server
- 子模块中存放的是一些配置文件、配置类、拦截器、controller、service、mapper、启动类等。
名称 说明 Entity 实体,通常和数据库中的表对应 DTO(data transfor object) 数据传输对象,通常用于程序中各层之间传递数据 VO(view object) 视图对象,为前端展示数据提供的对象 POJO 普通Java对象,只有属性和对应的getter和setter 使用Git进行版本控制
- 创建Git本地仓库
- 创建Git远程仓库
- 将本地文件推送到Git远程仓库
数据库搭建
前后端联调,测试登录功能
反向代理和正向代理
- 正向代理:代理客户端向服务器发起的请求
- 例:客户端无法直接访问某G浏览器,通过一台能够访问某G的代理服务器,客户端发起的请求由代理服务器代为转发给某G服务器,再将返回数据返回给客户端。
- 反向代理:将前端发送的动态请求有nginx转发到后端服务器。
- 例:客户端访问百度域名来到nginx代理服务器,根据负载均衡的策略选择转发到后端哪台服务器上进行响应。
nginx
反向代理的好处
- 提高访问速度
- 进行负载均衡
- 所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。
- 保证后端服务安全
nginx
负载均衡策略
名称 说明 轮询 默认方式 weight 权重方式,默认为1,权重越高,被分配的客户端请求就越多 ip_hash 依据ip分配方式,这样每个访客可以固定访问一个后端服务 least_conn 依据最少连接方式,把请求优先分配给连接数少的后端服务 url_hash 依据url分配方式,这样相同的url会被分配到同一个后端服务 fair 依据响应时间方式,响应时间短的服务将会被优先分配
nginx
反向代理配置说明
nginx
负载均衡配置说明
1.3.3 登录功能完善
将密码加密后存储,提高安全性
使用MD5加密方式对明文密码加密
--------------------------------------------------------------------------------------------------
1.3.4 前后端分离开发流程
1.4 导入接口文档
新建项目将接口文档导入YApi中。
1.5 Swagger
介绍
使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。
官网:https://swagger.io/
Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。
使用方式
1.导入 knife4j 的maven坐标
2.在配置类中加入 knife4j 相关配置
3.设置静态资源映射,否则接口文档页面无法访问
接口文档访问路径为http://ip:port/doc.html
- YApi是设计阶段使用的工具,管理和维护接口
- Swagger在开发阶段使用的框架,帮助后端开发人员做后端的接口测试
Swagger常用注解
EmployeeController
package com.sky.controller.admin; import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result; import com.sky.service.EmployeeService; import com.sky.utils.JwtUtil; import com.sky.vo.EmployeeLoginVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /** * 员工管理 */ @RestController @RequestMapping("/admin/employee") @Slf4j @Api(tags = "员工相关接口") public class EmployeeController { @Autowired private EmployeeService employeeService; @Autowired private JwtProperties jwtProperties; /** * 登录 * * @param employeeLoginDTO * @return */ @ApiOperation("员工登录") @PostMapping("/login") public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) { log.info("员工登录:{}", employeeLoginDTO); Employee employee = employeeService.login(employeeLoginDTO); //登录成功后,生成jwt令牌 Map<String, Object> claims = new HashMap<>(); claims.put(JwtClaimsConstant.EMP_ID, employee.getId()); String token = JwtUtil.createJWT( jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), claims); EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder() .id(employee.getId()) .userName(employee.getUsername()) .name(employee.getName()) .token(token) .build(); return Result.success(employeeLoginVO); } /** * 退出 * * @return */ @ApiOperation("员工退出") @PostMapping("/logout") public Result<String> logout() { return Result.success(); } }
EmployeeLoginVO
package com.sky.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data @Builder @NoArgsConstructor @AllArgsConstructor @ApiModel(description = "员工登录返回的数据格式") public class EmployeeLoginVO implements Serializable { @ApiModelProperty("主键值") private Long id; @ApiModelProperty("用户名") private String userName; @ApiModelProperty("姓名") private String name; @ApiModelProperty("jwt令牌") private String token; }
1.6 注意事项
开启开发环境,启用application-dev.yml
变更mapper同包同名映射关系
TODO和Git相关配置