TecHub项目笔记

大概会以一个时间线的方式,从0开始搭建项目.

贴一个复制

1
2
3
4
5
6
7
8

/**
* @author JakicDong
* @time 2025.6.25
* @description 启动类
* @version 1.0.0
*/

项目介绍

以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
2
3
4
5
<parent>
<groupId>com.github.JakicDong.TecHub</groupId>
<artifactId>TecHub</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

父模块

1
2
3
4
5
6
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

这个项目用的就是spring3,所以父模块继承一个spring3的框架.

入口

@SpringBootApplication
public class TecHubApplication {
//这是一个入口类
//再次测试
}

导入了依赖项

进度

将项目结构进行完整的梳理

自动加载初始化

com/github/JakicDong/TecHub/config/init/ForumDataSourceInitializer.java

这一部分包括很多的知识点,liquibase来管理更改sql,xml解析,jdbc连接数据库等等,然后实现了一个在没有liquibase的情况下的一个初始化器.

实现了分类接口的list功能

实现用户名密码登录方式

实现Reqinfo全局拦截器

1
2
3
4
5
6
7
8
9
10
HTTP Request

Filter#doFilter()
↓──→ Interceptor#preHandle()

Controller Method

Interceptor#postHandle()

Filter#doFilter()剩余代码

全局异常处理

ForumExceptionHandler
通过实现ExceptionHandler接口,实现异常处理.

但是注意,这个异常处理只会处理接口中抛出的异常,不会处理没有接口处理的请求.

STOMP实现全局消息通知

2025.9.8实现

总结一下就是,通过STOMP可以实现一个实时响应的全局通知功能.
首先通过客户端连接服务端端口,来实现连接,此时进行身份验证和校验.
然后客户端对broker进行订阅,订阅的目的是为了接收服务端发送的消息.
然后如果客户端向服务端发送消息,会向进行发送/app,然后去掉/app前缀,把后面的部分作为消息的destination,然后向MessageMapping节点进行转发即刻进行处理.
服务端发送给客户端消息,会直接转发到broker端口进行发送,客户端只需要对broker端口进行监听即可.

然后就是选型,为什么要使用STOMP,而不是RabbitMQ,因为首先STOMP的实时性能更好,并且这个项目的使用场景是公司内部,所以长连接数量不会很多,所以选择STOMP.
此外STOMP是一个全双工的协议,可以实现实时的双向通信且实现简单,可以满足项目需求.

关于点赞 收藏 评论等操作的通知

在本项目中,点赞收藏等操作的通知是通过Spring的发布者订阅者模式来实现的.
因为点赞收藏评论等这些操作他们并不是和Controller功能内聚的,为了实现高内聚低耦合的结果,所以可以这些重复的Controller里面的操作提取出来,通过消息发布订阅模型来实现不论在哪个接口,只需要通过发布消息,来实现相同的功能.

  • 高内聚低耦合:通知属于“横切的后置能力”,不该绑死在某个 Controller 上;抽到事件监听后,控制层更纯净。
  • 复用与一致性:任意入口(多个 Controller、服务内部、任务)只要发布同一种事件,就能触发同一套通知逻辑,避免重复代码。
  • 性能与体验:配合异步,主流程更快返回;通知在后台统一处理。

并且
监听侧要做幂等与去重(你们的点赞/关注已处理)。
注意事务发布时机与是否需要同步/异步(强一致走同步或事务提交后事件,其他走异步)。