我正在与Spring Boot 2.1.5
合作。我正在尝试编写一项服务,以拦截对MongoDB的所有写调用。基本上就像DBMS中的Op日志一样,在将任何数据写入DB甚至更新或删除之前,我捕获正在更新或创建的文档。
这甚至可能吗?如果可以,怎么办?
用于在我的应用程序中进行的数据库调用。因为您看到有一个包含100个左右API的大型应用程序,所以很难在所有API控制器或服务中实际集成OpLog(数据库更新,写入,删除),而是编写一个在功能之前触发的拦截器或方面称为MongoRepository或MongoTemplate。
答案 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();
}
}