以前,我从事Meteor和MongoDB的研究。当我处理它时,我注意到如果Mongo DB中发生任何更改,Meteor服务器会重新加载数据。
我们可以在Java Spring Boot中做这些事情吗?我检查了实时重新加载工具和插件。这些插件和工具会在代码更改时重新加载或重新启动服务器,但在DB更改时不会重新加载。
答案 0 :(得分:3)
我假设您正在谈论MongoDB变更流。
是的,您可以注册一个侦听器:
命令式
可以使用在MessageListenerContainer中注册的MessageListener消耗更改流事件。容器负责在单独的线程中运行任务,以将事件推送到MessageListener。
@Configuration
class Config {
@Bean
MessageListenerContainer messageListenerContainer(MongoTemplate template) {
return new DefaultMessageListenerContainer(template);
}
}
一旦安装了MessageListenerContainer,便可以注册MessageListeners。
MessageListener<ChangeStreamDocument<Document>, Person> messageListener = (message) -> {
System.out.println("Hello " + message.getBody().getFirstname());
};
ChangeStreamRequest<Person> request = ChangeStreamRequest.builder()
.collection("person")
.filter(newAggregation(match(where("operationType").is("insert"))))
.publishTo(messageListener)
.build();
Subscription subscription = messageListenerContainer.register(request, Person.class);
// ...
反应式
更改流事件通过连接到更改流的Flux直接消耗。
Flux changeStream = reactiveTemplate
.changeStream(newAggregation(match(where("operationType").is("insert"))),
Person.class, ChangeStreamOptions.empty(), "person");
changeStream.doOnNext(event -> System.out.println("Hello " + event.getBody().getFirstname()))
.subscribe();
详细了解以下内容: https://github.com/spring-projects/spring-data-examples/tree/master/mongodb/change-streams