如何仅在local Spring Profile下启动Flapdoodle嵌入式Mongo?
解决嵌入式Mongo仅在local Profile启动的问题
我明白你想让Flapdoodle嵌入式Mongo只在local Spring Profile下运行,就像H2测试数据库那样,现在它不管什么Profile都自动启动的问题确实挺头疼的。你已经做了全局排除自动配置的第一步,接下来只需要针对性地在local Profile下重新导入配置就行,具体步骤如下:
1. 保持全局排除自动配置
你已经在启动类上添加了排除注解,这一步是对的,先确保全局不会自动加载嵌入式Mongo:
@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 创建Local Profile专属配置类
新建一个配置类,用@Profile("local")指定仅在local Profile激活时生效,然后通过@Import导入嵌入式Mongo的自动配置:
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Profile; import de.flapdoodle.embed.mongo.spring.autoconfigure.EmbeddedMongoAutoConfiguration; @Configuration @Profile("local") @Import(EmbeddedMongoAutoConfiguration.class) public class LocalEmbeddedMongoConfig { // 如果需要自定义嵌入式Mongo的配置(比如指定版本、端口),可以在这里添加@Bean // 比如: // @Bean // public IMongodConfig mongodConfig() throws IOException { // return new MongodConfigBuilder() // .version(Version.Main.V7_0) // .net(new Net(27017, Network.localhostIsIPv6())) // .build(); // } }
3. 验证效果
- 当激活
localProfile时(比如在application.properties中设置spring.profiles.active=local,或者运行时添加参数--spring.profiles.active=local),Spring会加载LocalEmbeddedMongoConfig,从而启动嵌入式Mongo。 - 当使用其他Profile(比如
dev、prod)时,这个配置类不会生效,嵌入式Mongo也就不会自动启动了,此时你可以配置连接外部Mongo实例。
这样就能完美实现你想要的:仅在local环境下启动嵌入式Mongo,其他环境使用真实的Mongo服务。
内容的提问来源于stack exchange,提问作者Brad Mace
相关产品推荐
相关产品推荐

