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


概述

  • 首先要感謝兩位大神,該項目的想法來源自taleMyBlog

  • 做了一些改造,增加了一些功能和一些代碼的重構,並且更換了博客主題。

  • 關於項目,對於開發的練手項目,能夠工程化,嚴謹一些。

  • 關於文檔,本文主要中從項目需求,項目設計的方式來闡述.

  • 如何從零開始,使用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
  • 域名是騰訊送的
  • 網站需要備案,備案的話,只要按照阿里雲提示的流程走,就可以了,就是上傳個人身份信息,和審核,大概需要一個月的時間

開發總結

網站地址

www.janti.cn

項目代碼

 喜歡的話,給個推薦,給個star鼓勵一下

如果有項目上的一些問題,可直接郵箱我 jantent@qq.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM