用于MongoDB数据插入的Spring Listener

时间:2018-02-21 12:21:35

标签: spring mongodb server-sent-events

我有一个要求,我需要将实时插入到特定MongoDB集合中的数据显示到用户的仪表板上。请注意,此用户或其他用户可能会插入数据。仪表板是Spring MVC Web应用程序的一部分。 MongoDB数据层是用Spring Data编写的。

我打算使用服务器发送事件方法将新插入的数据推送到仪表板。我正在寻找一种使用Spring监听数据插入的有效方法。我甚至接受非Spring方法来实现最终将与我的Spring SSE发射器通信的Listener。

2 个答案:

答案 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 collectionTailable 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为此提供示例,但方法应该是相同的。