Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于MongoDB数据插入的Spring侦听器_Spring_Mongodb_Server Sent Events - Fatal编程技术网

用于MongoDB数据插入的Spring侦听器

用于MongoDB数据插入的Spring侦听器,spring,mongodb,server-sent-events,Spring,Mongodb,Server Sent Events,我需要将插入特定MongoDB集合的数据实时显示在用户的仪表板上。请注意,数据可能由该用户或其他用户插入。仪表板是Spring MVC web应用程序的一部分。MongoDB数据层是用Spring数据编写的 我打算使用服务器发送事件的方法将新插入的数据推送到仪表板。我正在寻找一种使用Spring侦听数据插入的有效方法。我甚至愿意采用非Spring的方法来实现最终将与Spring SSE发射器对话的侦听器。您可以通过和在MongoDB中实现。例如,通过MongoDB框架(例如MongoDB Jav

我需要将插入特定MongoDB集合的数据实时显示在用户的仪表板上。请注意,数据可能由该用户或其他用户插入。仪表板是Spring MVC web应用程序的一部分。MongoDB数据层是用Spring数据编写的

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

您可以通过和在MongoDB中实现。例如,通过MongoDB框架(例如MongoDB Java驱动程序)使用flags
QUERYOPTION_TAILABLE | QUERYOPTION_waitdata
获取MongoDB OpLog集合,并执行以下查询

MongoCursor<> cursor = db.getCollection('oplog.rs').find({ns:"collectionName", op:"i"})
MongoCursor=db.getCollection('oplog.rs').find({ns:“collectionName”,op:“i”})
其中,
“collectionName”
是集合的名称,
“i”
是插入操作。从游标接收事件后,可以将事件发送到共享流中


不幸的是,我不熟悉Spring数据来提供一个例子,但是方法应该是相同的。

如果所有的保存都通过Spring数据层,那么您可以使用Mongo Listener生命周期事件

@组件

公共类MongoListener扩展了AbstractMongoEventListener,这是一个使用可定制游标的示例项目

在用户“A”的应用程序上下文中创建的生命周期事件(即由“A”发起的事件)是否会通过Mongo侦听器告知用户“B”?当您说用户A和B时,这些是应用程序用户还是Mongo用户?另外,您是否为不同的用户创建了单独的mongo用户?应用程序用户。写入特定mongodb集合的某些用户数据需要在所有应用程序用户的仪表板上可见spring数据的关键在于使用的mongoTemplate that,而不管您的应用程序用户是谁。所以它应该会起作用。试试看
@Component
public class MongoListener extends AbstractMongoEventListener<Account> 
{

    @Override
    public void onAfterSave(AfterSaveEvent<E> event) {

            if (LOG.isDebugEnabled()) {
                LOG.debug("onAfterSave({}, {})", event.getSource(), event.getDocument());
            }
        }
}