spring boot之從零開始開發自己的網站

概述

  • 首先要感謝兩位大神,該項目的想法來源自tale和MyBlog。
  • 做了一些改造,增加了一些功能和一些代碼的重構,並且更換了博客主題。
  • 關於項目,對於開發的練手項目,能夠工程化,嚴謹一些。
  • 關於文檔,本文主要中從項目需求,項目設計的方式來闡述.
  • 如何從零開始,使用springboot開發項目。
  • 記錄一些在開發過程中遇到的一些問題,總結開發技巧

接下來,會以需求和設計方式來闡述


效果圖

首頁展示

spring boot之從零開始開發自己的網站

spring boot之從零開始開發自己的網站

文章管理

spring boot之從零開始開發自己的網站


項目需求

項目背景

對於剛學習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 boot之從零開始開發自己的網站

結構設計

spring boot之從零開始開發自己的網站

熟悉spring開發的同學,相信對此結構圖也並不陌生。平時的開發過程中,結構設計是重要的緩解,特別是協作開發的時候,明細的分包,模塊化,可減少在git提交時的衝突。

業務設計

本模塊主要介紹一些關鍵的業務流程。

  • 發佈文章流程:
spring boot之從零開始開發自己的網站

  • 修改文章的流程大致上和發佈是相似的,這裡不再贅述了
  • 登錄流程
spring boot之從零開始開發自己的網站

文件上傳

  • 在寫文章的時候,通常會使用到圖片,可以引用一些網絡上的圖片,更好的是本系統支持上傳文件和圖片
  • 將文件區別為圖片和其他,圖片支持預覽模式
  • 文件路徑設計成絕對路徑,在web系統中可直接引用
  • 文件按月份歸類,文件名以uuid的重新命名存儲
  • 其他文件支持下載
  • 文件上傳流程圖

spring boot之從零開始開發自己的網站

  • 首頁展示首頁也文章列表+圖片的形式展示內容,默認最大顯示12篇文章,包括髮布時間和分類上部展示菜單欄,支持搜索,歸檔頁等功能右側顯示菜單欄,展示個人github地址,個人信息,標籤雲等使用redis緩存首頁的html頁面,加速訪問。

打包、部署和運行

  • 本項目採用springboot的maven插件進行打包,打成jar形式
  • 部署方式:使用**nohub java -jar xxx.jar &**的方式,啟動項目

數據設計

用戶表:t_users

spring boot之從零開始開發自己的網站

用戶表主要管理後臺管理用戶。

文章表:t_contents

spring boot之從零開始開發自己的網站

主要管理文章內容,外鍵為cid

標籤表:t_metas

spring boot之從零開始開發自己的網站

管理標籤信息,外鍵為mid

文章標籤關係表:t_relationships

spring boot之從零開始開發自己的網站

記錄文章和分類的關係,多對多表

性能與可靠性

性能設計

  • 將文章內容寫入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
  • 域名是騰訊送的
  • 網站需要備案,備案的話,只要按照阿里雲提示的流程走,就可以了,就是上傳個人身份信息,和審核,大概需要一個月的時間


分享到:


相關文章: