我正在尝试使用Mongo Java Driver 3.6使用新的ChangEstream功能,但我被卡住了。这是我的错误:
ChangeStreamDocument contains generic types that have not been specialised.
Top level classes with generic types are not supported by the PojoCodec.
这是我启动ChangEstream的方式:
CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase(mongoClientURI.getDatabase())
.withCodecRegistry(pojoCodecRegistry);
collection.insertOne(Person.builder().age(100).build());
collection.insertOne(Person.builder().age(100).build());
collection.watch().forEach((Block<? super ChangeStreamDocument<Person>>) personChangeStreamDocument -> {
System.out.println(personChangeStreamDocument.getFullDocument());
});
Person
只是一个pojo。
如Java-2800中所述,当前有一个自动ProjoCodecProvider
的错误。
临时解决方法是注册POJO类,例如:
CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().register(Person.class).build()));
此外,请注意,如果您在集合上打开更改流之前,您执行了插入操作,则您 May 无法查看事件插入。尽管您可以通过从另一个线程或过程中插入/更改文档来轻松测试它。有关更多信息,请参见更改流。
更新:票务JAVA-2800
已解决,并在MongoDB Java驱动程序v3.6.4 上提供了修复版本。