java - 拦截对 MongoDB Spring Boot 的所有写调用
问题描述
我正在与Spring Boot 2.1.5
. 我正在尝试编写一个服务来拦截对 MongoDB 的所有写调用。基本上类似于 DBMS 中的操作日志,在任何数据被写入 DB 甚至更新或删除之前,我会捕获正在更新或创建的文档。
这甚至可能吗?如果有怎么办?
它用于从我的应用程序中进行的数据库调用。因为您看到假设您有一个包含大约 100 个 API 的大型应用程序,所以很难在所有 API 控制器或服务中实际集成 OpLog(数据库更新、写入、删除),而是编写一个在函数之前触发的拦截器或方面MongoRepository 或 MongoTemplate 被调用。
解决方案
您可以扩展 org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener 并实现您的自定义侦听器。
这是相关的春季文档。
AbstractMappingEventListener 中存在以下回调方法:
onBeforeConvert:在对象被 MongoConverter 转换为 Document 之前,在 MongoTemplate 的 insert、insertList 和 save 操作中调用。
onBeforeSave:在将 Document 插入或保存到数据库之前,在 MongoTemplate 的 insert、insertList 和 save 操作中调用。
onAfterSave:在将 Document 插入或保存到数据库后,在 MongoTemplate 的 insert、insertList 和 save 操作中调用。
onAfterLoad:在从数据库中检索到 Document 后,在 MongoTemplate 的 find、findAndRemove、findOne 和 getCollection 方法中调用。
onAfterConvert:在从数据库中检索到 Document 并转换为 POJO 后,在 MongoTemplate 中调用 find、findAndRemove、findOne 和 getCollection 方法。
如果要记录所有操作,可以定义一个 org.springframework.data.mongodb.core.mapping.event.LoggingEventListener 的 bean。
@Configuration
public class MongoConfig {
@Bean
public LoggingEventListener<Object> listener(){
return new LoggingEventListener();
}
}
推荐阅读
- firebase - 使用 Firebase Cloud Functions、Messaging、Firestore 制作自动通知
- python - 无法访问当前工作目录中的文件 - 'FileNotFoundError: [Errno 2] 没有这样的文件或目录'
- python - 在解析 JSON 文件数据时,根据 Python 配置文件中提到的位置添加具有空值的缺失字段
- angular - Angular 2+如何在对等模块中引用组件
- python - 如何使用 python 和 selenium 在新选项卡中打开链接
- c - 如何移动光标以在文件中写入新行而不必读取整个现有行?
- c# - 如何在 C# 中将 EXIF 数据写入图像?
- python - 如何将多行 Python 代码转换为单行?
- python - 如何遍历模板中的多维列表/字典
- django - 带有 whitenoise.django 的 ImportError