整体介绍
开发流程
flowchart TD A[需求分析] --> B[设计] B --> C[编码] C --> D[测试] D --> E[上线运维] A -->|需求规格说明书、产品原型| A B -->|UI设计、数据库设计、接口设计| B C -->|项目代码、单元测试| C D -->|测试用例、测试报告| D E -->|软件环境安装、配置| E
角色分工
- 项目经理:对整个项目负责,任务分配、把控进度
- 产品经理:进行需求调研,输出需求调研文档、产品原型等
- UI设计师:根据产品原型输出界面效果图
- 架构师:项目整体架构设计、技术选型等
- 开发工程师:代码实现
- 测试工程师:编写测试用例,输出测试报告
- 运维工程师:软件环境搭建、项目上线
软件环境
- 开发环境(development):开发人员开发阶段用,外部用户一般无法访问
- 测试环境(testing):供测试人员测试项目用,外部用户一般无法访问
- 生产环境(production):线上环境,正式对外提供服务
技术选型

环境搭建
前端
前端工程所在路径为/资料/day01/前端运行环境/nginx-1.20.2/html
后端

pojo
-
sky-common 子模块中存放的是一些公共类,可以供其他模块使用
-
sky-pojo 子模块中存放的是一些 entity、DTO、VO

- sky-server 子模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类等
前后端联调


upstream webservers{
server 127.0.0.1:8080 weight=90 ;
server 127.0.0.1:8088 weight=10 ;
}
server {
listen 80;
server_name localhost;
location /api/ {
proxy_pass http://webservers/admin/;
}
}| 名称 | 说明 |
|---|---|
| 轮询 | 默认方式 |
| weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
| ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
| least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
| url_hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
| fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
Info
nginx 反向代理的好处:
- 提高访问速度
- 进行负载均衡(按照一定策略将请求分配给集群中的每台服务器)
- 保证后端服务安全(nginx走内网请求后端服务)
完善登录功能
- 修改数据库中明文密码,改为MD5加密后的密文
- 修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对
password = DigestUtils.md5DigestAsHex(password.getBytes());Swagger
- 导入 knife4j 的maven坐标
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>- 在配置类中加入 knife4j 相关配置
在sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java路径下
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}- 设置静态资源映射,否则接口文档页面无法访问
Info
这段代码配置了静态资源处理器。主要功能是:
- 将”/doc.html”请求映射到classpath下的”/META-INF/resources/“目录
- 将”/webjars/**“请求映射到classpath下的”/META-INF/resources/webjars/“目录
这样可以访问Swagger UI界面及相关静态资源文件。
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}常用注解
| 注解 | 说明 |
|---|---|
@Api | 用在类上,例如Controller,表示对类的说明 |
@ApiModel | 用在类上,例如entity、DTO、VO |
@ApiModelProperty | 用在属性上,描述属性信息 |
@ApiOperation | 用在方法上,例如Controller的方法,说明方法的用途、作用 |
@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "员工相关接口")
public class EmployeeController {
@ApiOperation(value = "员工登录")
@PostMapping("/login")
public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {
}
@PostMapping("/logout")
@ApiOperation(value = "员工退出")
public Result<String> logout() {
return Result.success();
}
}
@Data
@ApiModel(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}