PRO

Echo 论坛项目教程

Echo 是一套前后端不分离的社区系统,基于目前主流 Java Web 技术栈(SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + …),并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。
<img width="" src="https://cs-wiki.oss-cn-shanghai.aliyuncs.com/33.png" > @[toc] --- # Echo — 基于 SpringBoot 的论坛系统 ## 项目简介 Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java Web 技术栈(SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ...),并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。 **源码链接**:已托管在 Github 和 Gitee: - Gitee:[https://gitee.com/veal98/Echo](https://gitee.com/veal98/Echo)(Gitee 官方推荐项目) - Github:[https://github.com/Veal98/Echo](https://github.com/Veal98/Echo) ## 核心技术栈 后端: - Spring - Spring Boot 2.1.5 RELEASE - Spring MVC - ORM:MyBatis - 数据库:MySQL 5.7 - 分布式缓存:Redis - 本地缓存:Caffeine - 消息队列:Kafka 2.13-2.7.0 - 搜索引擎:Elasticsearch 6.4.3 - 安全:Spring Security - 邮件任务:Spring Mail - 分布式定时任务:Spring Quartz - 日志:SLF4J(日志接口) + Logback(日志实现) 前端: - Thymeleaf - Bootstrap 4.x - Jquery - Ajax ## 开发环境 - 操作系统:Windows 10 - 构建工具:Apache Maven - 集成开发工具:Intellij IDEA - 应用服务器:Apache Tomcat - 接口测试工具:Postman - 压力测试工具:Apache JMeter - 版本控制工具:Git - Java 版本:8 ## 界面展示 首页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205641.png) 登录页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205558.png) 密码重置页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210709003428.png) 帖子发布页(支持 MarkDown): ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210512101041.png) 帖子详情页(MarkDown 渲染): ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210512101202.png) 帖子详情页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205741.png) 个人主页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205820.png) 朋友私信页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205857.png) 私信详情页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211205948.png) 系统通知页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211210122.png) 通知详情页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211210152.png) 账号设置页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211210238.png) 数据统计页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211210323.png) 搜索详情页: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211210531.png) ## 功能列表 ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210208222403.png) - [x] **注册** - [x] **登录 | 登出** - 动态生成验证码 - 记住我 - 忘记密码 - [x] **账号设置** - 修改头像 - 修改密码 - [x] **过滤敏感词** - 前缀树 - [x] **帖子模块** - 发布帖子(过滤敏感词),支持 Markdown 格式 - 分页显示所有的帖子 - 支持按照 “发帖时间” 显示 - 支持按照 “热度排行” 显示(Spring Quartz) - 查看帖子详情 - 权限管理(Spring Security + Thymeleaf Security) - 未登录用户无法发帖 - “版主” 可以看到帖子的置顶和加精按钮并执行相应操作 - “管理员” 可以看到帖子的删除按钮并执行相应操作 - “普通用户” 无法看到帖子的置顶、加精、删除按钮,也无法执行相应操作 - [x] **评论模块** - 发布对帖子的评论(过滤敏感词) - 分页显示评论 - 发布对评论的回复(过滤敏感词) - 权限管理(Spring Security) - 未登录用户无法使用评论功能 - [x] **私信模块** - 发送私信(过滤敏感词) - 私信列表 - 查询当前用户的会话列表 - 每个会话只显示一条最新的私信 - 支持分页显示 - 私信详情 - 查询某个会话所包含的所有私信 - 访问私信详情时,将显示的私信设为已读状态 - 支持分页显示 - 权限管理(Spring Security) - 未登录用户无法使用私信功能 - [x] **统一处理 404 / 500 异常** - 普通请求异常 - 异步请求异常 - [x] **统一记录日志** - [x] **点赞模块** - 支持对帖子、评论/回复点赞 - 第 1 次点赞,第 2 次取消点赞 - 首页统计帖子的点赞数量 - 详情页统计帖子和评论/回复的点赞数量 - 详情页显示当前登录用户的点赞状态(赞过了则显示已赞) - 统计我的获赞数量 - 权限管理(Spring Security) - 未登录用户无法使用点赞相关功能 - [x] **关注模块** - 关注功能 - 取消关注功能 - 统计用户的关注数和粉丝数 - 我的关注列表(查询某个用户关注的人),支持分页 - 我的粉丝列表(查询某个用户的粉丝),支持分页 - 权限管理(Spring Security) - 未登录用户无法使用关注相关功能 - [x] **系统通知模块** - 通知列表 - 显示评论、点赞、关注三种类型的通知 - 通知详情 - 分页显示某一类主题所包含的通知 - 进入某种类型的系统通知详情,则将该页的所有未读的系统通知状态设置为已读 - 未读数量 - 分别显示每种类型的系统通知的未读数量 - 显示所有系统通知的未读数量 - 导航栏显示所有消息的未读数量(未读私信 + 未读系统通知) - 权限管理(Spring Security) - 未登录用户无法使用系统通知功能 - [x] **搜索模块** - [x] **网站数据统计**(管理员专属) - 独立访客 UV - 支持单日查询和区间日期查询 - 日活跃用户 DAU - 支持单日查询和区间日期查询 - 权限管理(Spring Security) - 只有管理员可以查看网站数据统计 - [x] **优化网站性能** - 处理每次请求时,都要通过拦截器根据登录凭证查询用户信息,访问的频率非常高。因此将已成功登录的用户信息在缓存 Redis 中保存一段时间,查询用户信息的时候优先从缓存中取值;若缓存中没有该用户信息,则将其存入缓存;用户信息变更时清除对应的缓存数据 - 引入本地缓存 Caffeine,缓存热帖列表和帖子的总数,提升响应速度(可以进一步采用二级缓存架构) ## 本地运行 各位如果需要将项目部署在本地进行测试,以下环境请提前备好: - Java 8 - MySQL 5.7 - Redis - Kafka 2.13-2.7.0 - Elasticsearch 6.4.3 然后**修改配置文件中的信息为你自己的本地环境,直接运行是运行不了的**,而且相关私密信息我全部用 xxxxxxx 代替了。 本地运行需要修改的配置文件信息如下: 1)`application-develop.properties`: - MySQL - Spring Mail(邮箱需要开启 SMTP 服务) - Kafka:consumer.group-id(该字段见 Kafka 安装包中的 consumer.proerties,可自行修改, 修改完毕后需要重启 Kafka) - Elasticsearch:cluster-name(该字段见 Elasticsearch 安装包中的 elasticsearch.yml,可自行修改) - 七牛云(需要新建一个七牛云的对象存储空间,用来存放上传的头像图片) 2)`logback-spring-develop.xml`: - LOG_PATH:日志存放的位置 每次运行需要打开: - MySQL - Redis - Elasticsearch - Kafka 另外,还需要事件建好数据库 greatecommunity,然后依次运行项目 sql 文件夹下的这几个 sql 文件建立数据库表: <img src="https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210217134928.png" style="width:386px" /> ## 部署架构 可以部署在同一台服务器上,以下是理想的部署架构: <img src="https://cs-wiki.oss-cn-shanghai.aliyuncs.com/20210211204207.png" />