我创建了一个实现ApplicationListener<ContextRefreshedEvent>
的类。我在onApplicationEvent
上执行的是Mongo oplog监视相关的代码。
while(true)
:我用tailablecursor
创建了一个.cursorType(CursorType.TailableAwait)
并检查cursor.hasNext()
是否触发事件
@Component
@ConfigurationProperties
public class mongoWatchService implements ApplicationListener<ContextRefreshedEvent> {
------------------------
.........................
BsonTimestamp timestamp = null;
MongoCursor<Document> cursor;
while (true) {
try {
cursor = mongoCollection.find(and(new Document()
.append("ns", String.join(".", "db", "collection")), new Document()
.append("op", "i")))
.cursorType(CursorType.TailableAwait).noCursorTimeout(true).iterator();
while (cursor.hasNext()) {
// Can occure Null pointers class cast Exceptions because of data mappings
final Document document = cursor.next();
timestamp = document.get("ts", BsonTimestamp.class);
final Document o = document.get("o", Document.class);
dsClient.event.emit("/event/", o); //TODO check what is the data object we need to emit
}
} catch (RuntimeException re) {
logger.error("Error Occurred {} in MongoWatch service" + re.getMessage());
}
}
当我运行应用程序启动过程时,我的问题在下图所示的位置等待。
tomcat启动时的日志状态
,但其余应用程序未在端口上运行。 Mongo oplog监视是可行的,但其余部分则无效。当我将其作为组件其余应用程序删除时,但mongo oplog监视逻辑不起作用。我在这里做错什么了吗,任何人都可以引导我采取正确的方法。