前言

为什么想要搭建这个博客?

我还记得,在大二寒假的某天,同往常一样的在家解决这某个bug,不停地问度娘,很巧的碰到了一个同行在他的博客中完美的记录了我的bug的解决方案,随后我又看了看他写的其他博客文章,觉得都非常的不错,并且同时也被他博客网站的简约清新吸引,也就在那刻,心中埋下了准备自己搭建myblog的种子…

于是在寒假的时候我就开始了Bootstrap了的学习,然后好像也并没有什么卵用,因为还是不会用~~~

就这样一直拖了大概有3个月,某天我才意识到我好像有件很重要的事没完成,就是这么的突然,毫无准备的就开始了博客的搭建。

自己在本子上设计了网站的所有页面的大致样式(也借鉴了许多大佬的博客样式,哈哈,我承认我审美不是很好),列出了应该有的功能,当时看来并不算多,也给自己定了一个目标期限,在7月5日之前上线,不错有了目标也就有了动力,就这么开始干了。

一件事情在开头总是想的很美好,然而事实总会跟你对着干。在博客搭建的过程中遇到了无数多的前端页面设计bug,我在此之前也可以算的上是个前端小小白,很是无奈,不过还是要在这里感谢翼灵工作室里帮我解决了许多bug的波波、田小宇和杨小卿,没有你们估计我的博客还得推迟半年才能上线吧,O(∩_∩)O哈哈~

6、7月也恰好是考试月,堆积在一起的无数们考试如暴风雨一样一夜袭来,一学期欠的帐总该还了,不得不放下手中的网站专心去备考,于是乎,完美的错过了本该上线的时间。

编程是个脑力活,如果把它做成了体力活,这就代表是时候改变一下了

文章概述

  • 关于项目,对于学习Springboot是个挺不错的练手项目,可以让你在烦恼的业务逻辑中保持一颗纯洁的心
  • 如何从零开始,使用Springboot开发项目
  • 开发前的一些准备工作,以及思考项目整体结构与思路
  • 记录开发过程中遇到的一些难题以及bug
  • 总结目前博客网站的一些优缺点
  • 思考整个项目有哪些可以优化的地方,以及有哪些可增加的功能

页面展示

首页展示

文章编辑

后台管理

用户个人中心

项目需求

项目背景

对于初学Springboot的朋友来说,最好的一个学习方式就是那一个功能俱全的项目来练练手,通过自己重构项目来发现其中的潜在难题,并且也能很好的在编码过程中总结和发现问题、解决问题。使用Springboot开发的博客系统,简单并且实用,适合做练手项目。

功能需求

主页

  • 博客汇总,以列表形式展示文章,并附上文章作者、发布日期、分类情况以及文章简要

  • 能够以分类形式查看文章

  • 能够以时间列表方式归档文章

  • 可实现通过标签查找所有相关文章

  • 个人介绍、联系方式

  • 博客网站更新记录

  • 友链链接

后台管理

  • 网站仪表盘,记录网站访客量情况

  • 文章管理
    1.分页展示文章信息
    2.可对文章进行再编辑以及删除文章

  • 发布文章
    1.使用markdown编辑器,支持插入代码,插入图片等功能
    2.文章可选择分类和标签,以及转载文章支持链接原作者文章

  • 分类管理,支持增加、删除、修改分类

  • 友情链接
    1.支持增加友情链接
    2.支持删除友情链接

  • 反馈信息管理,可查看用户反馈信息

安装部署需求

  • 可以使用docker方式部署,也可支持-jar方式
  • 使用springboot自带方式打包

非功能需求

性能需求

  • 首页响应时间不超过2秒钟
  • 文章页响应时间不超过3秒钟

项目设计

总体设计

  • 本项目用到的技术和框架
    1.项目构建:Maven
    2.web框架:Springboot
    3.数据库ORM:Mybatis
    4.数据库连接池: HikariCP
    5.分页插件:PageHelper
    6.数据库:MySql
    7.缓存:Redis
    8.前端模板:Thymeleaf
    9.文章展示:Editor.md

  • 本项目中的关键点
    1.采用Springboot开发,数据库使用连接池加orm框架的模式,对于系统的关键业务使用Redis缓存,加快相应速度。
    2.整体系统采用门户网站+后台管理+用户个人中心的方式搭建,门户网站展示博客内容以及博主介绍,后台管理用于编辑文章,查看反馈,管理评论留言。
    3.使用阿里云OSS进行静态资源存储,以及CDN全站加速。

  • 环境

工具 名称
开发工具 IDEA
语言 JDK1.8、HTML、css、js
数据库 Mysql5.6
项目框架 SSM
ORM Mybatis
安全框架 SpringSecurity
缓存 Redis
项目构建 Maven
运行环境 阿里云Centos7

结构设计


对于熟悉Spring开发的朋友来说,相信对此结构也不会陌生。平时的开发过程中,结构设计是重要的环节,特别是协作开发的时候,明细的分包,模块化,可减少代码提交时的冲突。并且明确的结构有助于我们快速的寻找所对应的类。

业务设计

发布文章流程

登录流程

用户个人资料修改流程

打包、部署和运行

数据设计

用户表:user

名称 类型 长度 主键 非空 描述
id int 11 true true 主键,自增
phone varchar 255 false true 手机号
username varchar 255 false true 用户名
password varchar 255 false true 密码
gender char 50 false true 性别
trueName varchar 255 false false 姓名
birthday char 100 false false 生日
email varchar 255 false false 邮箱
personalBrief varchar 255 false false 个人简介
avatarImgUrl varchar 255 false true 头像url
recentlyLanded varchar 255 false false 最近登录时间

文章表:article

名称 类型 长度 主键 非空 描述
id int 11 true true 主键,自增
articleId bigint 20 false true 文章id
author varchar 255 false true 作者
originalAuthor varchar 255 false true 文章原作者
articleTitle varchar 255 false true 文章标题
articleContent longtext 0 false true 文章内容
articleTags varchar 255 false true 文章标签
articleType varchar 255 false true 文章类型
articleCategories varchar 255 false true 文章分类
publishDate varchar 255 false true 发布文章日期
updateDate varchar 255 false true 更新文章日期
articleUrl varchar 255 false true 文章url
articleTabloid 0 255 false true 文章摘要
likes int 11 false true 文章喜欢数
lastArticleId bigint 20 false false 上一篇文章id
nextArticleId bigint 20 false false 下一篇文章id

评论记录表:comment_record

名称 类型 长度 主键 非空 描述
id bigint 20 true true 主键,自增
pId bigint 20 false true 父id
articleId bigint 20 false true 文章id
originalAuthor varchar 255 false true 文章原作者
answererId int 11 false true 评论者id
respondentId int 11 false true 被评论者id
commentDate varchar 100 false true 评论日期
likes int 11 false true 评论点赞数
commentContent text 0 false true 评论内容

开发流程

数据库CRUD

  • controller层中编写前端接口,接收前端参数
  • service层中编写所需业务接口,供controller层调用
  • 实现service层中的接口,并注入mapper层中的sql接口
  • 采用Mybatis的JavaConfig方式编写Sql语句。由于并没有使用Mybatis的逆向功能,需要自己手写所有sql语句
  • 关于事务的实现,在启动类中开启事务,并在service层需要实现事务的业务接口上使用@Transactional注解,还是十分方便的
  • 本项目开发并不是很难,只是在业务的实现上比较复杂

页面与展示

  • 作为一名后端开发,对于css的功力有所欠缺,这里我使用了妹子UI主题,极大的减少了页面的开发难度,特此感谢
  • 前端页面与后端的交互主要是在controller包中,并使用Thymeleaf渲染页面。
  • 自定义异常处理页面,通过重写WebMvcConfigurerAdapter实现自动跳转到404、403页面

其他功能

  • 使用lazyload插件实现页面图片懒加载
  • 后台实时记录当天访客量,便于了解博客日常访问量
  • 分析访问量最多的数据,主要在于文章访问部分,将文章放入redis缓存。每次编辑完文章后,更新缓存
  • 使用阿里云互联网中间件的业务实时监控服务,对于网站性能的了解以及优化有很大的帮助

网站建设

  • 服务器选用的是阿里云centos7
  • 域名是阿里云上购买的.cn的域名
  • 网站备案以及公安机关备案,后者备案时间较短但是那个备案网站经常挂掉,所以公安机关备案还得看运气。而网站备案时间就比较长了,按照阿里云的流程走大概1个月左右时间,需要上传个人身份信息以及邮寄个人资料过去。
  • 网站配置了安全证书,可实现https访问以及自动从http跳转到https

总结

开发中遇到的难点

  • 要实现在一个页面进行权限验证,如果验证不成功会跳转到登录界面,并且登录成功后还要返回到之前界面,这里由于对SpringSecurity内部原理的不了解,所以我这里采用的方法是利用请求头和响应头存储url,并在登录成功后的页面出跳转到响应头中存储的url处
  • 上传头像处使用上传头像至阿里云的OSS对象存储中,由于上传问题并没有返回上传成功后的图片url地址,于是只好设置OSS的Bucket为公共读权限,然后当上传成功后手动拼接图片url并存入数据库
  • 项目中最大的难点还是莫过于页面css的设计,但是使用了妹子UI后极大的解决了这个问题,只需修改少量css就能实现自己所需要的样式

博客网站优缺点

  • 首先最大的一个缺点就是在前端页面设计过程中混用了一些Bootstrap,导致依赖过于复杂,不便于后期修改,已经网站上有一些隐藏的bug
  • 对于页面用户体验以及反馈功能的设计便于用户对于浏览过程中出现的问题进行反馈
  • 后端部分明确的分工有利于项目的理解与维护

项目整体优化

  • 目前项目首页以及文章页响应时间过长,后期最好优化到1s响应时间
  • 定时定期进行数据库的备份,防止出现网站被攻击后数据丢失的风险
  • 写文章部分目前仅支持插入网络图片,无法从本地上传图片
  • 手机端浏览文章页面会出现代码自动换行问题,不便于浏览过程

未来需增加的功能

  • 增加文章分享至QQ、微信、微博中功能
  • 用户可在线写文章功能
  • 用户收藏文章功能

以上就是我在博客网站搭建过程后的所有总结记录,可能会有遗缺部分,等以后想起来了再来修改吧。

本人秉持开源原则,待后期网站功能完善之后会同步源码至Github、码云中。需要搭建个人博客的朋友欢迎使用本博客,只要给我个star就好啦,哈哈。如果搭建过程中有各种问题欢迎来骚。

更多了解,还请关注我的个人博客:www.zhyocean.cn

目前博客源码已上传至GitHub:https://github.com/zhyocean/MyBlog,欢迎star,有问题也可以加我QQ一起讨论。

Springboot搭建个人博客系列相关推荐

  1. 【SpringBoot搭建个人博客】- 相册管理(九)

    博客地址:ONESTARの客栈 源码领取方式一: 扫一扫文末二维码,关注公众号[编程日刊],后台回复[博客],即可领取源码 源码领取方式二: 前端页面源码地址:https://github.com/o ...

  2. 【Hexo搭建GitPage博客系列】02.环境搭建

    转载声明:商业转载请联系作者获得授权,非商业转载请注明出处.原文来自 © 呆萌钟[Hexo搭建GitPage博客系列]02.环境搭建 前言 Hexo搭建博客需要基于Node.js环境,而且依赖于Git ...

  3. 【SpringBoot搭建个人博客】- 博客首页显示(十)

    博客地址:ONESTARの客栈 源码领取方式一: 扫一扫文末二维码,关注公众号[编程日刊],后台回复[博客],即可领取源码 源码领取方式二: 前端页面源码地址:https://github.com/o ...

  4. 基于Springboot搭建个人博客 (学习笔记)

    个人博客搭建 技术选型 主要框架 安装 RabbitMq,Elasticsearch 安装RabbitMq 安装环境 下载安装包 安装配置 erlang 安装配置 rabbitMQ 验证 安装Elas ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. 用Node.JS+MongoDB搭建个人博客(成品展示)

    在博客里可以随意畅写和分享自己喜欢的技术,和网友分享知识也是一种提升.根据自己所发表的博客也能更加加深印象. 与此同时写博客也可以提高自己的写作能力(虽然不咋地),但我相信博客只会越写越有质量的. 个 ...

  7. 关于Hexo6.0搭建个人博客(github+Google-收录篇)

    本文原创首发于慕课网,欢迎转载,注明出处即可. 本篇博文将继续带大家优化博客站点,打造上线站点,设置个性域名等 阅读本文前建议先行阅读本人另外三篇遍基础博文 1.关于Hexo6.0搭建个人博客(基础篇 ...

  8. 用python搭建个人博客过程_技术分享|利用Python Django一步步搭建个人博客(四)...

    您好,欢迎来到本期"利用Python Django一步步搭建个人博客"系列的第四部分.在上一篇教程中,我们学习了如何编写URL并将其映射到页面.在我们继续之前,我们需要做的一件事是 ...

  9. django项目转pyc_Python自动化运维系列:Django搭建小博客

    如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...

最新文章

  1. oracle date怎么用,Oracle to_date的使用方法
  2. 漫画:据说很多搞软件的羡慕硬件工程师
  3. linux运行rmp文件,linux 里rpm包到底是干什么用的啊?
  4. 【哲学】为什么威尔·杜兰特在其所著的《哲学的故事》一书中说“所有科学源于哲学,终于艺术?”
  5. VTK:可视化之OrientedGlyphs
  6. python列表写入csv文件_将多个列表写入csv。Python中的文件
  7. Webpack进阶(二)代码分割 Code Splitting
  8. c++11中的智能指针
  9. JPA /休眠刷新策略初学者指南
  10. ip网络基础知识及原理_关于网络测试的5个命令
  11. docker pull mysql_docker 拉取mysql数据库
  12. day21—AngularJS学习初体验
  13. python爬取系统_python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说...
  14. c7中取4c语言编程软件,c语言编程软件_C语言编程
  15. 剑指Offer之扑克牌顺子
  16. Python Flask Web 第七课 —— 使用 flask-moment 本地化日期和时间
  17. c语言中数据类型的课件,C语言数据类型课件.ppt
  18. 【网页模板】Bootstrap免费模板
  19. 柳夜熙又更新了,虚拟人的底层技术是什么?
  20. 计算机维修与维护笔记,笔记本电脑维护选购知识大全

热门文章

  1. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
  2. DDD:关于聚合的思考
  3. Android之Tab分页标签的实现方法--------采用ActivityGroup和GridView的结合
  4. 如何实现自己的机器做服务器
  5. step4 . day5 进程与进程的创建
  6. css transition animation
  7. 检测到在集成的托管管道模式下不适用的 ASP.NET 设置, HTTP 错误 500.23 解决方案...
  8. Linux基础知识--进程管理与计划任务
  9. NVIDIA | 一种重建照片的 AI 图像技术
  10. JAVA中构造器和方法的区别点