TecHub项目笔记
大概会以一个时间线的方式,从0开始搭建项目.
贴一个复制
1 |
|
项目介绍
以Spring3框架为基础,VUE3作为前端
配置本地Git仓库和GitHub远程仓库
IDEA中建立项目根目录本地仓库,文件变红说明配置成功,然后提交一次.
配置远程仓库,先在IDEA中登录GitHub账号,然后GitHub建立远程仓库
然后在IDEA中配置远程仓库地址.git remote add origin git@github.com:xxx/xxx,git(origin后面替换成你刚复制的东西)
git push -u origin master (解释:该脚本将本地的master 推到刚才设置的github远程仓库中)
如果没有配过公钥的话可能会报错,配置一个公钥即可.
然后就可以愉快的进行远程版本控制了.
子模块创建
需要注意子模块和父模块pom文件的格式.
子模块:
1 | <parent> |
父模块
1 | <parent> |
这个项目用的就是spring3,所以父模块继承一个spring3的框架.
入口
@SpringBootApplication
public class TecHubApplication {
//这是一个入口类
//再次测试
}
导入了依赖项
进度
将项目结构进行完整的梳理
自动加载初始化
com/github/JakicDong/TecHub/config/init/ForumDataSourceInitializer.java
这一部分包括很多的知识点,liquibase来管理更改sql,xml解析,jdbc连接数据库等等,然后实现了一个在没有liquibase的情况下的一个初始化器.
实现了分类接口的list功能
实现用户名密码登录方式
实现Reqinfo全局拦截器
1 | HTTP Request |
全局异常处理
ForumExceptionHandler
通过实现ExceptionHandler接口,实现异常处理.
但是注意,这个异常处理只会处理接口中抛出的异常,不会处理没有接口处理的请求.
STOMP实现全局消息通知
2025.9.8实现
总结一下就是,通过STOMP可以实现一个实时响应的全局通知功能.
首先通过客户端连接服务端端口,来实现连接,此时进行身份验证和校验.
然后客户端对broker进行订阅,订阅的目的是为了接收服务端发送的消息.
然后如果客户端向服务端发送消息,会向进行发送/app,然后去掉/app前缀,把后面的部分作为消息的destination,然后向MessageMapping节点进行转发即刻进行处理.
服务端发送给客户端消息,会直接转发到broker端口进行发送,客户端只需要对broker端口进行监听即可.
然后就是选型,为什么要使用STOMP,而不是RabbitMQ,因为首先STOMP的实时性能更好,并且这个项目的使用场景是公司内部,所以长连接数量不会很多,所以选择STOMP.
此外STOMP是一个全双工的协议,可以实现实时的双向通信且实现简单,可以满足项目需求.
关于点赞 收藏 评论等操作的通知
在本项目中,点赞收藏等操作的通知是通过Spring的发布者订阅者模式来实现的.
因为点赞收藏评论等这些操作他们并不是和Controller功能内聚的,为了实现高内聚低耦合的结果,所以可以这些重复的Controller里面的操作提取出来,通过消息发布订阅模型来实现不论在哪个接口,只需要通过发布消息,来实现相同的功能.
- 高内聚低耦合:通知属于“横切的后置能力”,不该绑死在某个 Controller 上;抽到事件监听后,控制层更纯净。
- 复用与一致性:任意入口(多个 Controller、服务内部、任务)只要发布同一种事件,就能触发同一套通知逻辑,避免重复代码。
- 性能与体验:配合异步,主流程更快返回;通知在后台统一处理。
并且
监听侧要做幂等与去重(你们的点赞/关注已处理)。
注意事务发布时机与是否需要同步/异步(强一致走同步或事务提交后事件,其他走异步)。