概述
-
做了一些改造,增加了一些功能和一些代碼的重構,並且更換了博客主題。
-
關於項目,對於開發的練手項目,能夠工程化,嚴謹一些。
-
關於文檔,本文主要中從項目需求,項目設計的方式來闡述.
-
如何從零開始,使用springboot開發項目。
-
記錄一些在開發過程中遇到的一些問題,總結開發技巧
接下來,會以需求和設計方式來闡述
效果圖
首頁展示
文章編輯
文章管理
項目需求
項目背景
對於剛學習springboot的同學,最好的就是拿一個項目練練手。在編碼過程中遇到的問題並解決,這都是寶貴的經驗。 用springboot開發的博客系統,簡單而且實用,適合做練手項目。
功能需求
界面需求
主頁
- 博客匯總,以列表加圖片的形式展示
- 能夠以分類的方式查看文章
- 能夠以時間列表的方式歸檔文章
- 個人介紹,github地址
- 搜索框,能夠搜索文章
后台管理
-
管理主頁,記錄最新文章,最新留言,最近日志等
- 最近日志記錄登錄IP,地址,操作等
- 記錄一天的訪問量
-
發布文章
- 使用markdown編輯器,支持插入代碼,插入圖片等功能
- 能夠給文章添加縮略圖。
- 可將文章存為草稿或者發布
- 文章可選擇分類和標簽,自定義url
- 文章可控制是否允許評論
-
文章管理
- 以列表形式展示文章信息
- 在可選操作中增加刪除,預覽,編輯功能
- 支持分頁顯示
- 增加搜索功能,可根據文章名文章信息
-
分類管理
- 可以新增、刪除、修改分類
-
文件管理
- 支持文件上傳
- 支持刪除已上傳的文件
-
友情鏈接
- 支持增加友情鏈接
- 支持刪除友情鏈接
-
系統設置
- 支持修改密碼
- 支持備份數據庫
- 支持黑名單配置
非界面需求
- 日志記錄,記錄來訪IP名單
- 每天定時備份數據庫
安裝部署需求
- 可以使用docker方式部署,也可支持-jar方式
- 使用springboot自帶方式打包
非功能性需求
性能需求
- 首頁響應的時間不超過1秒鍾
- 文章頁響應時間不超過1秒鍾
項目設計
總體設計
-
本項目用到的技術和框架
- 項目構建: maven
- web框架:spring boot
- 數據庫ORM:mybatis
- 數據庫連接池:Druid
- 分頁插件:PageHelper
- 數據庫:mysql
- 緩存NOSQL:redis
- 前段模板:thymeleaf
- 文章展示:使用commonmark,將markdown轉成html頁面
-
本項目的關鍵點
- 采用springboot開發,數據庫使用連接池加orm框架的模式,對於系統的關鍵業務使用redis緩存,加快響應速度
- 整體系統采用門戶網站+后台管理的方式搭建,門戶主要展示博客內容,后台管理主要用於編輯文章,上傳附件,控制黑名單登錄等。
-
環境
結構設計
熟悉spring開發的同學,相信對此結構圖也並不陌生。平時的開發過程中,結構設計是重要的緩解,特別是協作開發的時候,明細的分包,模塊化,可減少在git提交時的沖突。
業務設計
本模塊主要介紹一些關鍵的業務流程。
-
發布文章流程:
-
修改文章的流程大致上和發布是相似的,這里不再贅述了
-
登錄流程
文件上傳
- 在寫文章的時候,通常會使用到圖片,可以引用一些網絡上的圖片,更好的是本系統支持上傳文件和圖片
- 將文件區別為圖片和其他,圖片支持預覽模式
- 文件路徑設計成絕對路徑,在web系統中可直接引用
- 文件按月份歸類,文件名以uuid的重新命名存儲
- 其他文件支持下載
- 文件上傳流程圖
- 首頁展示
- 首頁也文章列表+圖片的形式展示內容,默認最大顯示12篇文章,包括發布時間和分類
- 上部展示菜單欄,支持搜索,歸檔頁等功能
- 右側顯示菜單欄,展示個人github地址,個人信息,標簽雲等
- 使用redis緩存首頁的html頁面,加速訪問。
打包、部署和運行
- 本項目采用springboot的maven插件進行打包,打成jar形式
- 部署方式:使用**nohub java -jar xxx.jar &**的方式,啟動項目
數據設計
用戶表:t_users
用戶表主要管理后台管理用戶。
文章表:t_contents
主要管理文章內容,外鍵為cid
標簽表:t_metas
管理標簽信息,外鍵為mid
文章標簽關系表:t_relationships
記錄文章和分類的關系,多對多表
性能與可靠性
性能設計
- 將文章內容寫入redis中,加快訪問速度
可靠性設計
- 后台管理,可以系統日志,查看系統運行狀態
- 定時發送郵件,發送服務端的可用內存,cpu,最新日志,硬盤情況進行監控
- 對於惡意的IP,支持黑名單設置,禁止訪問
開發流程
數據庫的curd
-
首先,編寫sql語句,創建數據庫。
-
本項目的crud操作采用mybatis的逆向功能,對於特殊操作,需要自己手寫sql語句
-
springboot如何使用mybatis,以及mybatis的逆向工程,請參考springboot與mybatis
-
編寫service層,根據需求分析和概要設計,將具體業務轉成具體代碼
-
關於事務的使用,使用srping中的@Transactional,還是很方便的
-
本流程的開發不是特別難,關鍵在於業務的實現
頁面與展示
-
作為一個后端開發,css的功力還是有所欠缺的,所以也是用了妹子UI主題,和tale的后端頁面,大大減少了頁面的開發難度,特此感謝
-
頁面與后端的交換主要是在controller包中,springboot的頁面開發和springmvc是幾乎一樣的,@PostMapping和@GetMapping這兩個注解也是方便了開發。
-
統一的異常處理,使用@ControllerAdvice,定義異常頁面,設置自動跳轉500,404頁面。
-
攔截器,獲取http請求中的ip,判斷是否在黑名單(如果在,則禁止訪問系統)
其他功能
-
該項目是在My blog基礎上修改的,修復了部分bug,增加添加黑白單功能,指定文章縮略圖
-
分析訪問量最多的數據,主要在於文章訪問部分,將文章放入redis緩存。每次編輯完文章后,更新緩存
-
每天定時發送郵件,匯報服務器運行狀態和最新日志,手機即可查看。
系統安全
-
使用阿里雲雲主機,借助阿里雲本身防護機制,
-
在主機中安裝denyhosts,對於嘗試暴力破解ssh的IP,實施封禁
-
對於評論部分,能夠抵御sql注入和xss攻擊
打包測試
-
使用springboot本身測試方式,在集成測試之前,先進行單元測試
-
打包,使用springboot的mvn插件,打成jar包
網站建設
- 服務器選用的是阿里雲centos7
- 域名是騰訊送的
- 網站需要備案,備案的話,只要按照阿里雲提示的流程走,就可以了,就是上傳個人身份信息,和審核,大概需要一個月的時間
開發總結
-
以上是我學習springboot總結的一些博客,特此分享
網站地址
喜歡的話,給個推薦,給個star鼓勵一下
如果有項目上的一些問題,可直接郵箱我 jantent@qq.com