mongodb - 在spring中使用嵌入式mongo仅用于本地测试

标签 mongodb spring-boot testing embedded-database

我正在尝试使用 flapdoodle 嵌入式 mongo 数据库('de.flapdoodle.embed:de.flapdoodle.embed.mongo') 对于本地手动测试,我将使用 H2 进行关系数据库测试。我只希望嵌入式 mongo 在“本地”SPring 配置文件下运行时启动,但我不知道如何实现它——它总是在任何配置文件下启动。

我已经尝试将 @SpringBootApplication(exclude=EmbeddedMongoAutoConfiguration.class) 添加到我的应用程序中(我想我可以稍后将该自动配置重新导入到单个配置文件中)但这似乎没有任何影响.

有谁知道如何将它限制为单个配置文件,以一种在 Eclipse 和 Gradle 中运行时都能正常工作的方式?

最佳答案

我可以想到两种方法:

1- 仅在 maven 或 gradle 的特定配置文件中加载您的依赖项

行家

 <profiles>
    <profile>
        <id>local</id>
        <dependencies>
            <dependency>
                <groupId>de.flapdoodle.embed</groupId>
                <artifactId>de.flapdoodle.embed.mongo</artifactId>
                <version>2.0.4-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </profile>
 </profiles>

渐变

if (project.hasProperty('local')) {
    dependencies {
       compile 'de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.0.4-SNAPSHOT'
    }
}

2- 在类里面使用@Profile 和@Import

LoadEmbeded.java

@Profile(value = "local")
@Configuration
@Import(EmbeddedMongoAutoConfiguration.class)
public class LoadEmbeded {

}

希望它能给你一个想法


编辑 1: 我已经测试了我的方法并制作了一个非常简单的应用程序。它适用于 @Profile。这是我测试过的。

@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
public class DemoApplication {

    @Autowired
    TestRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    CommandLineRunner runner() {
        return args -> {
            System.out.println(repository.save(new Test()));
            System.out.println(repository.findAll());
        };
    }
}

@Repository
interface TestRepository extends MongoRepository<Test, String> {

}

@Document
class Test {

    @Id
    private String id;

    public String getId() {
        return id;
    }

    public Test setId(String id) {
        this.id = id;
        return this;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("id", id)
                .toString();
    }
}

@Configuration
@Profile("local")
@Import(EmbeddedMongoAutoConfiguration.class)
class Load {

}

application.properties

spring.profiles.active=local

当我将事件配置文件更改为本地 以外的其他内容时,它会在启动期间抛出异常并提示 mongodb 的连接。但是当我将它设置为本地时,它会起作用并向我显示保存的测试实体的 ID。

如果您仍然遇到同样的问题,也许您的依赖项之一正在再次加载嵌入式 MongoDB,即使您排除了它。通常它应该与测试依赖项一起使用。检查您的依赖项。

关于mongodb - 在spring中使用嵌入式mongo仅用于本地测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156858/

相关文章:

ruby-on-rails - 如何使用 rspec 测试 Formtastic 自定义输入?

java - 每 3 秒轮询一次 MongoDB

python - 在 MongoDB 中存储加密密码时出现问题

testing - @RunWith(Cucumber.class) 和@Autowired MockMvc

java - SpringBoot - 完全停用安全性以启用摘要转发

java - Spring Boot POSTed JSON 数据验证

testing - 用于自动发送到 Windows 应用程序的鼠标和键盘事件的工具

java - BasicDBObject 更新重复的同一文档

mongodb - 使用基于文档的 nosql(mongodb、couchdb 和 riak 等)查询关系数据的性能

spring - CORS 和 Spring Websocket