我正在尝试使用 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/