代码之家  ›  专栏  ›  技术社区  ›  Neminda Prabhashwara

如何通过spring AbstractMongoEventListener检测mongo数据库的更改

  •  0
  • Neminda Prabhashwara  · 技术社区  · 5 年前

    我需要一个应用程序来监听mongodb中的更改,并向用户发送响应。通过外部post请求对数据库进行更改,然后我需要启动一个事件侦听器。

    我搜索了好几天,我的想法是,这可以通过 AbstractMongoEventListener 班

    我使用 spring.data.mongodb.host, spring.data.mongodb.port, spring.data.mongodb.database .我可以从我的弹簧后端保存数据,并在端口8080上检索它们。

    现在,我使用postman使用外部post请求在mongodb实例中存储数据。我需要从后端检测对数据库的这些更改。

    从…起 this post 我有一些想法,但它并没有真正解释如何注册 AbstractMongoEventListener 是的 onAfterSave 方法

    这是我的活动听众,

    package com.example.demo;
    
    import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
    import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
    
    public class HotelsRepositoryListener extends AbstractMongoEventListener<Object> {
    
        @Override
        public void onAfterSave(AfterSaveEvent<Object> event) {
            super.onAfterSave(event);
            System.out.println("Saved");
        }
    }
    

    我想我必须实现一个配置类来注册这个监听器,但我不知道怎么做。这是我的 pom.xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.1</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot with mongodb</description>
    
        <properties>
            <java.version>11</java.version>
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    我知道我们可以用 Bean 和一些注释来记录这一点。但我不太清楚。有人能帮我解决这个问题吗?

    0 回复  |  直到 5 年前
        1
  •  2
  •   saver    5 年前

    AbstractMongoEventListener 类实现接口 ApplicationListener 这是spring上下文模块的一部分(spring具有来自box的事件机制,您可以为不同的操作添加自己的侦听器,而无需直接连接组件。有关更多详细信息: https://www.baeldung.com/spring-events ),这意味着你可以通过注释来注册你的听众 HotelsRepositoryListener 具有 @Component 并添加带有该侦听器的包以进行扫描( @ComponentScan 注释)或创建如下配置类:

    @Configuration
    public class Config {
    
        @Bean
        public HotelsRepositoryListener hotelsRepositoryListener() {
            return new HotelsRepositoryListener();
        }
    
    }