概述
- 首先要感謝兩位大神,該項目的想法來源自tale和MyBlog。
- 做了一些改造,增加了一些功能和一些代碼的重構,並且更換了博客主題。
- 關於項目,對於開發的練手項目,能夠工程化,嚴謹一些。
- 關於文檔,本文主要中從項目需求,項目設計的方式來闡述.
- 如何從零開始,使用springboot開發項目。
- 記錄一些在開發過程中遇到的一些問題,總結開發技巧
接下來,會以需求和設計方式來闡述
效果圖
首頁展示
文章管理
項目需求
項目背景
對於剛學習springboot的同學,最好的就是拿一個項目練練手。在編碼過程中遇到的問題並解決,這都是寶貴的經驗。 用springboot開發的博客系統,簡單而且實用,適合做練手項目。
功能需求
界面需求
主頁
- 博客彙總,以列表加圖片的形式展示
- 能夠以分類的方式查看文章
- 能夠以時間列表的方式歸檔文章
- 個人介紹,github地址
- 搜索框,能夠搜索文章
後臺管理
- 管理主頁,記錄最新文章,最新留言,最近日誌等最近日誌記錄登錄IP,地址,操作等記錄一天的訪問量
- 發佈文章使用markdown編輯器,支持插入代碼,插入圖片等功能能夠給文章添加縮略圖。可將文章存為草稿或者發佈文章可選擇分類和標籤,自定義url文章可控制是否允許評論
- 文章管理以列表形式展示文章信息在可選操作中增加刪除,預覽,編輯功能支持分頁顯示增加搜索功能,可根據文章名文章信息
- 分類管理可以新增、刪除、修改分類
- 文件管理支持文件上傳支持刪除已上傳的文件
- 友情鏈接支持增加友情鏈接支持刪除友情鏈接
- 系統設置支持修改密碼支持備份數據庫支持黑名單配置
非界面需求
- 日誌記錄,記錄來訪IP名單
- 每天定時備份數據庫
安裝部署需求
- 可以使用docker方式部署,也可支持-jar方式
- 使用springboot自帶方式打包
非功能性需求
性能需求
- 首頁響應的時間不超過1秒鐘
- 文章頁響應時間不超過1秒鐘
項目設計
總體設計
- 本項目用到的技術和框架項目構建: mavenweb框架: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
- 域名是騰訊送的
- 網站需要備案,備案的話,只要按照阿里雲提示的流程走,就可以了,就是上傳個人身份信息,和審核,大概需要一個月的時間
閱讀更多 java後端開發 的文章