注意
你需要修改的地方:
- qqconnectconfig.properties
- com.moti.config.ElasticSearchConfig
- com.moti.config.GiteeImgBedConfig
- resources/application.yml
前言
哈喽大家好,我是莫提。最近新写了一个非常简约的个人博客系统。用了差不多快一个月吧(中间肯定有划水摸鱼的时间,哈哈)。这次的项目用了几个我之前没有用过的技术,也成功结合并实现了我的一些想法。个人觉得也是非常适合于初学者学习!
主要功能
文章方面
首先既然是个人博客系统,肯定要对写文章有一个非常友好的支持!不然感觉只好看不实用也是扯淡。不得不说现在使用MarkDown
写文章的人是越来越来。哈哈,这篇文章其实也是用MarkDown
写的!
在写文章方面,我开发的个人博客同样支持MarkDown
的语法,使用的是目前一个比较好用的编辑器叫EditMd
。
在这个系统里面写的文章,把原文复制一下,就可以在任何支持MarkDown的文章轻松的发表,不需要改任何格式,也不需要重新上传图片。为什么嘞?因为我直接使用了码云当做我这个项目的图床(对外提供图片链接,通过链接就可以访问到这张图片)。这样如果之后再开发一个备份的功能就非常方便了!
为了更加友好的写博客,我自己还新增了从剪切板复制图片到输入框实现图片的粘贴上传。哈哈,我觉这个功能是很多个人开发的博客系统不具备的。
之后我还开发了一些作为博客系统必须具备的功能,比如编辑、存草稿、回收站、文集(文章分类)、标签、文章归档等等。这些功能其实和一般的博客系统都差不多,没啥好说的。
关于文章评论,读者看到后填写基本的信息之后就可以发表评论了。
后台可以对评论进行管理,比如查看、删除、回复这些,回复的时候可以选择是否向用户填写的邮箱发送回复邮件,及时通知留言者。
评论管理
查看与回复
发送邮件内容
在前提主页有一个站内搜索,访客可以在这里根据关键词搜索文章!之后的搜索结果也会高亮显示!这里用到了ElasticSearch搜索引擎,配置了好用的IK分词器之后搜索的结果会更加的准确!
用户方面
首先是登录,设计了两种登录方式,一个是用户名和密码,一个是QQ登录。诶?有的人可能很奇怪了,这怎么能用QQ登录呢?其实这个应该叫做绑定QQ,如果之前数据库里面没有QQ用户的信息,那么第一次登录的时候就将这个QQ的信息写到数据库实现绑定的功能,这应该叫先入为主。
之后用户可以修改个人资料,直接上图吧~
上传完微信二维码和公众号二维码,之后可以在前台主页进行显示。
定时统计
项目中引入了Redis,我们就可以方便进行统计了,比如文章的阅读量,我只是简单的设计了刷新一次页面就算一次阅读。在没有引入Redis之前我是每次刷新,就更新数据库!非常不推荐! 现在我们就把今天的阅读量放到Redis中,然后写一个定时任务,把Redis中的数据写到数据库,这绝对算是一种优化吧~
定时任务
同样的原理,我们需要统计访客信息,统计访客的阅读记录与阅读次数(其实就是后台的访问与访客)。我们需要记录访客的IP地址和访问的文章以及阅读次数等等。其实这里我想把访客统计做的更加细致,能根据IP获取到地址的那种,但是找了几个免费的API,淘宝就有一个,能用是能用,但是访问的次数多了就获取不到数据了,哎,后来我就把这个功能删掉了,做成了现在比较简单的版本。
站点装扮
这里就比较简单了,直接上图~
主页部件
这个前台主页我是想做的既美观又实用,额,只能做成这样了,来个效果。
侧边开发了公告、本地天气、站内搜索、热门文章、标签云、文集、文章归档、友情链接、访客统计等。
阅读文章页面时长这样的
技术栈
主要功能上面已经说得差不多了,现在来讲讲这个项目用到了哪些技术。
前端
名称 | 技术点 |
---|---|
基础 | Html、Css、JavaScript、Jquery |
UI框架 | BootStrap |
文本编辑器 | EditMd |
前台模板 | Olympus |
后台模板 | Pike Admin |
前台模板和后台模板我都已经上传到了我的QQ交流群。喜欢的可以去下载一波~
后端
名称 | 技术点 |
---|---|
开发 | SpringBoot、MyBatis |
数据库 | MySQL 5.7 + Druid |
缓存 | Redis + EhCache |
消息队列 | RabbitMq |
搜索引擎 | ElasticSearch |
其他 | 邮件任务、定时任务、QQ登录、Lombok、Jrebel、码云API |
项目难点
项目使用到了ElasticSearch搜索引擎,后台在对文章进行修改、删除时更新数据库的同时需要更新ElasticSearch,如果使用串 行修改会很影响效率。难点在于在不影响系统性能的情况下保证MySQL与ES的数据一致性。
解决
编写定时任务每天0点对ES进行数据重建,在文章做出更新后使用RabbitMq消息队列推送更新/删除的消息,分析场景最后我 使用了RabbitMq的Topic模型。编写更新消费者和删除消费者,使用同一个交换机,匹配不同的key对消息进行消费,实现对 ES中的数据进行同步。
结语
最后最后,决定把此项目开源!附上项目的Github地址😊。喜欢的话一定别忘了给我颗⭐。