sky-take-out chapter 1

jhhhred發表於2024-08-09

開發環境搭建

一、前端環境搭建

二、後端環境搭建

2.1 專案結構

(1)sky-take-out: maven父工程,統一管理依賴版本,聚合其他掌控子模組
(2)sky-common: 子模組,存放公共類,例如:工具類、常量類、異常類等

  • constant 常量類
  • context 與專案上下文有關
  • enumeration 列舉類
  • exception 異常類
  • json 處理json轉換
  • properties 屬性,Springboot中的配置屬性類
  • result 後端的一些返回結果
  • utils 工具類

(3)sky-pojo: 子模組,存放實體類、VO、DTO等

  • dto: 資料傳輸物件,通常用於程式中各層之間傳遞資料。例如:前端傳來json資料,後端接收資料並封裝為一個物件,這個物件就是dto。
  • entity:實體,通常和資料庫中的表對應
  • vo:檢視物件,為前端展示資料提供的物件,例如:列表資料、表單資料,後端把這些資料封裝為java物件,返回給前端展示
  • pojo:普通java物件,只有屬性和對應的getter和setter,其實上三者均屬於pojo

(4)sky-server:子模組,後端服務,存放配置檔案、Controller、Service、Mapper等

  • config:配置類
  • controller.admin
  • handler
  • interceptor:攔截器
  • mapper
  • service:服務類
  • SkyApplication:啟動類

三、Git環境搭建

四、資料庫環境搭建

序號 資料表名 中文名稱
1 employee 員工表
2 category 分類表
3 dish 菜品表
4 dish_flavor 菜品口味表
5 setmeal 套餐表
6 setmeal_dish 套餐菜品關係表
7 user 使用者表
8 address_book 地址表
9 shopping_cart 購物車表
10 orders 訂單表
11 order_detail 訂單明細表

五、前後端聯調

(1)將應用程式跑起來,遇到了個版本相容性問題,折騰了一下,更新透過Maven依賴更新新版 lombok 為 1.18.30 解決
(2)斷點除錯跟蹤登入功能的執行過程
(3)前端傳送的請求,是如何請求到後端服務的
前端請求地址:http://localhost/api/employee/login
後端請求地址:http://localhost:8080/admin/employee/login

Q:前後端請求地址不一樣還能請求到,為啥呢?
A:nginx反向代理,就是將前端傳送的動態請求有ngnix轉發到後端伺服器
nginx反向代理好處:

  • 提高訪問速度,可在nginx這層做快取
  • 進行負載均衡:所謂負載均衡就是把大量的請求按照我們指定的方式均衡的分配給叢集中的每臺伺服器
  • 保證後端服務安全:後端服務一般部署在公司的區域網,不對外開放。所以前端先把請求發給nginx伺服器,有nginx伺服器走內網將請求傳送給後端伺服器處理請求

(4)ngnix反向代理的配置方式:
在ngnix.conf中配置

server{   #server 虛擬主機

          listen:80;  
          server_name localhost          
          location/api/{  # 處理前端請求中有api的

                   proxy_pass http://localhost:8080/admin/;#反向代理
          }


}

(5)nginx 負載均衡的配置方式
在ngnix.conf下

upstream webservers{
         #後端服務的ip地址和埠號
         server 192.168.100.128.8080
         server 192.168.100.129.8080
      

}

server{   #server 虛擬主機

          listen:80;  
          server_name localhost          
          location/api/{  # 處理前端請求中有api的

                   proxy_pass http://webservers/admin/;#反向代理
          }


}

(6)nginx 負載均衡策略

  • 輪詢:預設方式,每臺伺服器接收到的請求是比較均衡的
  • weight:權重方式,預設為1,權重越高,被分配的客戶請求就越多
  • in_hash:依據ip分配方式,這樣每個訪客可以固定訪問一個後端服務
  • least_conn:依據最少連線方式,把請求優先分配給連線數少的後端服務
  • url_hash:依據url分配方式,這樣相同的url會被分配到同一個後端服務
  • fair:依舊響應時間方式,響應時間短的服務會被優先分配

六、完善登入功能

問題: 員工表中的密碼是明文儲存,安全性太低
TODO:對密碼進行加密

使用MD5加密方式對明文密碼加密,該演算法是單向的
步驟:

  1. 修改資料庫中明文密碼,改為MD5加密後的密文
  2. 修改java程式碼,前端提交的密碼進行MD5加密後再跟資料庫中密碼比對
// 進行md5加密,然後再進行比對
        password=DigestUtils.md5DigestAsHex(password.getBytes());

匯入介面文件

  • 前後端分離開發

  • 介面設計

  • 匯入介面文件,這裡我用的是apifox

  • Swagger的使用
    生成api文件: 透過knife4j生成介面文件
    可在設定的網頁中進行檢視文件和進行介面測試,提高測試效率

  • Swagger常用註解
    透過註解可以控制生成的介面文件,使介面文件擁有更好的可讀性
    1.@Api:用在類上,例如Controller,表示對類的說明
    2.@ApiModel:用在類上,例如entity、Dto、VO
    3.@ApiModelProperty: 用在屬性上,描述屬性資訊
    4.@ApiOperation:用在方法上,例如Controller的方法,說明方法的用途、作用

相關文章