【问题标题】:Live reload on Database update实时重新加载数据库更新
【发布时间】:2019-06-16 14:51:07
【问题描述】:

之前我在 Meteor 和 MongoDB 工作过。当我在处理它时,我注意到如果 Mongo DB 发生任何变化,Meteor 服务器会重新加载数据。

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

【问题讨论】:

    标签: java mysql spring mongodb meteor


    【解决方案1】:

    我假设您在谈论 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

    【讨论】:

    • 对于 mongo-java-driver 3.8.2 还需要:messageListenerContainer.start(); After register();
    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多