耗时三周,完成了博客系统的前台和后台的开发,全过程参考的是bilibili的三更博客,该项目为前后端分离项目,自己主要完成的是后端的开发,对前端页面只是在原有的基础上做了适当的修改,三周的时间遇到过很多问题,特别是有些粗心大意的问题,再加上自己前端知识的欠缺,在一些没意义的问题就浪费了很长时间,好在最后都一一解决!
该博客系统后端主要运用的技术有:SpringBoot,MybatisPlus,Mybatis,MySql,SpringSecurity,EasyExcel,Redis等等;
谈几个自己印象深刻的技术点:
- 前后台系统在登录做校验时使用到的SpringSecurity技术,该框架是Spring家族中的一个安全管理框架,其原理就是一个过滤器链,该系统运用该框架的核心思想:自定义登录接口,调用ProviderManager的方法进行认证,再调用自定义的UserDetailsService方法去查询数据库,如果认证成功则生成jwt,把用户信息存入到redis中,在下一次做用户校验的时候获取token(就是生成的jwt),随后解析token获取到userId,从redis中获取用户信息,存入SecurityContextHolder中。
- 对于stream流的使用,使用Stream API能够写出更短的代码,其性能也良好,让我印象最深刻的是即使在map操作中就是一个简单的给list集合增加元素,也一定要在最后进行收集的操作,这也难怪其叫“流”,如果不收集,那只能流走,不会做出map操作中的改变,其次就是在就行map操作时,涉及到对实体类的set操作时,想要让实体类的set操作有返回值的话。可以在实体类上添加@Accessors(chain = true),方便代码的链式编程。
- 关于redis的使用是在文章的浏览次数上,因为文章的浏览次数是实时更新的,当在高并发的情况有,去更改浏览次数时,会对数据库中对应的表上锁,那这样的话就会影响其他人的阅读体验,可能在打开一篇文章的时候就会有延迟,所以就考虑加入redis来解决这个问题,在项目启动时把博客的浏览量存储到redis中,更新浏览量时去更新redis中的数据,读取文章浏览量也是从redis中去读取,并且设定每隔一段时间就将redis中的数据同步到数据库中。
- 关于MybatisPlus的使用,更加熟练了MybatisPlus的使用,比如在增加查询条件时经常会用到的eq(),in(),这两个方法都有三个参数的重载形式,第一个参数返回值可以是布尔类型,这样就方便去做一些非空判断。
- 关于部署项目,初次体验了项目上线,主要用的有七牛云、阿里云、宝塔,本来项目代码是前后端分离的,但是为了部署方便,在代码打包的时候,将代码改成了伪的前后端分离。
其实很多都是一些琐碎的知识点,通过一个完整的项目实际上最主要增加的是自己编码能力以及编码规范,我也再一次的感受到,在学习的过程中,如果遇到问题一定要及时的以书面的形式记录下来,要不以后真的会忘记,遇到的那些错误才是自己最大的收获。