拦截对MongoDB Spring Boot的所有写调用

时间:2019-10-12 18:11:56

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

我正在与Spring Boot 2.1.5合作。我正在尝试编写一项服务,以拦截对MongoDB的所有写调用。基本上就像DBMS中的Op日志一样,在将任何数据写入DB甚至更新或删除之前,我捕获正在更新或创建的文档。

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

  

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

1 个答案:

答案 0 :(得分:0)

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

Here与spring docs有关。

  

AbstractMappingEventListener中存在以下回调方法:

     

onBeforeConvert:在MongoConverter将对象转换为Document之前,先在MongoTemplate中调用insert,insertList和save操作。

     

onBeforeSave:在将Document插入或保存到数据库之前,在MongoTemplate中调用insert,insertList和save操作。

     

onAfterSave:在将Document插入或保存到数据库后,调用MongoTemplate的insert,insertList和save操作。

     

onAfterLoad:从数据库中检索到文档后,在MongoTemplate中调用find,findAndRemove,findOne和getCollection方法。

     

onAfterConvert:从数据库中检索到文档后,在MongoTemplate中调用find,findAndRemove,findOne和getCollection方法转换为POJO。

如果要记录所有操作,则可以定义org.springframework.data.mongodb.core.mapping.event.LoggingEventListener的bean。

@Configuration
public class MongoConfig {

    @Bean
    public LoggingEventListener<Object> listener(){
        return new LoggingEventListener();
    }
}