我有一个要求,我需要将实时插入到特定MongoDB集合中的数据显示到用户的仪表板上。请注意,此用户或其他用户可能会插入数据。仪表板是Spring MVC Web应用程序的一部分。 MongoDB数据层是用Spring Data编写的。
我打算使用服务器发送事件方法将新插入的数据推送到仪表板。我正在寻找一种使用Spring监听数据插入的有效方法。我甚至接受非Spring方法来实现最终将与我的Spring SSE发射器通信的Listener。
答案 0 :(得分:3)
如果所有保存都通过您的spring-data层,那么您可以使用Mongo Listener生命周期事件docs。
@Component
public class MongoListener extends AbstractMongoEventListener<Account>
{
@Override
public void onAfterSave(AfterSaveEvent<E> event) {
if (LOG.isDebugEnabled()) {
LOG.debug("onAfterSave({}, {})", event.getSource(), event.getDocument());
}
}
}
如果没有,你必须阅读mongo oplog并处理或创建一个上限集合并使用tailable游标。
here是一个使用tailable游标的示例项目。
答案 1 :(得分:0)
您可以通过MongoDB中的OpLog collection和Tailable Cursors来完成此操作。例如,通过MongoDB框架(例如MongoDB Java Driver)使用标志QUERYOPTION_TAILABLE | QUERYOPTION_AWAITDATA
获取MongoDB OpLog Collection并执行以下查询
MongoCursor<> cursor = db.getCollection('oplog.rs').find({ns:"collectionName", op:"i"})
其中"collectionName"
是集合的名称,"i"
是插入操作。从光标接收事件后,您可以将事件发送到共享流中。
不幸的是,我不熟悉Spring Data为此提供示例,但方法应该是相同的。