Spring 当活动配置文件为“时,使用嵌入式MongoDB”;测试“;

Spring 当活动配置文件为“时,使用嵌入式MongoDB”;测试“;,spring,mongodb,spring-boot,integration-testing,Spring,Mongodb,Spring Boot,Integration Testing,我有 org.springframework.boot spring启动程序数据mongodb 在我的pom.xml中,因此我的Spring Boot应用程序在启动应用程序时尝试连接到本地主机上的MongoDB 我也有 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</arti

我有


org.springframework.boot
spring启动程序数据mongodb
在我的pom.xml中,因此我的Spring Boot应用程序在启动应用程序时尝试连接到本地主机上的MongoDB

我也有

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

de.flapdoodle.embed
de.flapdoodle.embed.mongo
测试
因此,当我运行单元测试时,使用了嵌入式MongoDb

出于集成测试的目的,如果应用程序是以“测试”活动概要文件启动的,那么我还想使用嵌入式MongoDB

因此,我希望有效地从嵌入依赖项中删除
test
,并在活动概要文件为“test”时使用嵌入版本

如何实现这一点?

使用spring配置文件


很可能您正在寻找的解决方案是添加对嵌入式mongo数据库的概要排除。请尝试执行以下步骤:

  • 假设默认配置文件用于开发目的,所以您希望在其中运行嵌入式mongo。EmbeddedMongoAtoConfiguration是负责配置嵌入式mongo数据库的类。它是在嵌入式mongo类位于类路径上时运行的,所以正如您所指出的,只需删除测试范围即可
  • 为生产、docker或任何适合您的产品创建配置文件,并在此配置文件中确保在yml(或属性文件)中添加以下条目:

    spring.autoconfigure.exclude:org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration

  • 请记住,embedded mongo现在位于您的类路径上,生产环境可能不需要它,所以您可能还需要配置maven以在一些maven概要文件中排除它


  • 我应该在哪里使用此注释?在类级别的测试中,该测试位于单独的项目中。我想用“测试”配置文件启动应用程序,并将其连接到嵌入式mongo,而不是安装在localhost上的版本。
    <dependency>
      <groupId>de.flapdoodle.embed</groupId>
      <artifactId>de.flapdoodle.embed.mongo</artifactId>
      <scope>test</scope>
    </dependency>
    
    @ActiveProfiles("test")