【问题标题】:Intercept all write calls to MongoDB Spring Boot拦截对 MongoDB Spring Boot 的所有写调用
【发布时间】:2019-10-14 22:49:08
【问题描述】:

我正在与Spring Boot 2.1.5 合作。我正在尝试编写一个服务来拦截对 MongoDB 的所有写调用。基本上类似于 DBMS 中的操作日志,在任何数据被写入 DB 甚至更新或删除之前,我会捕获正在更新或创建的文档。

这甚至可能吗?如果有怎么办?

它适用于从我的应用程序中进行的数据库调用。因为您看到假设您有一个包含大约 100 个 API 的大型应用程序,所以很难在所有 API 控制器或服务中实际集成 OpLog(数据库更新、写入、删除),而是编写一个在函数之前触发的拦截器或方面调用 MongoRepository 或 MongoTemplate。

【问题讨论】:

    标签: java spring-boot spring-data-mongodb


    【解决方案1】:

    您可以扩展 org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener 并实现您的自定义监听器。

    Here 是 spring 文档相关的。

    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();
        }
    }
    

    【讨论】:

    • 有没有我可以参考的文档或参考项目LoggingEventListener&lt;T&gt;自定义实现bean
    • 谢谢,正是我要找的东西
    • upsert不会触发事件监听器:(看this link to the official documentation
    猜你喜欢
    • 2018-10-29
    • 2018-08-09
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多