实时更新数据库更新

时间:2019-06-16 14:51:07

标签: java mysql spring mongodb meteor

以前,我从事Meteor和MongoDB的研究。当我处理它时,我注意到如果Mongo DB中发生任何更改,Meteor服务器会重新加载数据。

我们可以在Java Spring Boot中做这些事情吗?我检查了实时重新加载工具和插件。这些插件和工具会在代码更改时重新加载或重新启动服务器,但在DB更改时不会重新加载。

1 个答案:

答案 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