spring boot之從零開始開發本身的網站

概述

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

  • 作了一些改造,增長了一些功能和一些代碼的重構,而且更換了博客主題。html

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

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

  • 如何從零開始,使用springboot開發項目。git

  • 記錄一些在開發過程當中遇到的一些問題,總結開發技巧  github

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

效果圖

 首頁展現redis

 

文章編輯spring

 

 文章管理sql

項目需求

項目背景

對於剛學習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

相關文章
相關標籤/搜索