首页 > 解决方案 > 跨会话不可见对 mongo 集合的更改

问题描述

这是我的 mongo 配置:

@Configuration
public class MongoConfig {

    @Bean
    public MongoCustomConversions customConversions() {
        return new MongoCustomConversions(Arrays.asList(new OffsetDateTimeReadConverter(), new OffsetDateTimeWriteConverter()));
    }

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}

和:

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/my-database

我注意到我在 Spring Boot 服务中对我的集合所做的任何更改,无论我使用repositoryor MongoOperationssaveor find,它们仅在 Spring Boot 服务的生命周期内可见,并且在命令行 mongo 界面中不可见。此外,我使用 mongo 命令行添加的文档对 spring boot 服务不可见。据我所知,我只有一个 mongodb 实例,在任务管理器中只有一个可见。我也仔细检查了数据库和集合的名称。可能是什么原因?

标签: mongodbspring-boot

解决方案


我发现问题是由嵌入式 MongoDB 引起的:

    <dependency>
        <groupId>de.flapdoodle.embed</groupId>
        <artifactId>de.flapdoodle.embed.mongo</artifactId>
        <scope>test</scope>
    </dependency>

尽管范围是test,嵌入式服务器也为主要配置运行。我只能在 eclipse 中观察到这种行为,而不是在 Intellij 中。

我可以通过排除嵌入式配置来解决或至少规避该问题:

@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
public class MyApplication

推荐阅读