java - 在 Spring Boot 应用程序中使用嵌入式 MongoDb 和 MongoTemplate 失败

标签 java mongodb spring-boot spring-data-mongodb

我有 Spring Boot 应用程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication()
public class App {

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

}

build.gradle 包含:

testCompile group: "de.flapdoodle.embed", name: "de.flapdoodle.embed.mongo", version: "2.0.0"

compile("org.springframework.boot:spring-boot-starter-data-mongodb")

有使用 MongoTemplate 的 Controller

@RestController
@RequestMapping(Constants.MAILBOX_BASE_PATH)
public class MController {

    private static final Logger log = LoggerFactory.getLogger(MailboxController.class);

    private MongoTemplate mongoTemplate;

    @Autowired
    public MController(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
}

并测试

@RunWith(SpringRunner.class)
@SpringBootTest()
@AutoConfigureMockMvc
public class MontrollerTests { 

    @Autowired
    private MockMvc mvc;

    private MongoTemplate _mongoTemplate;
...
}

我的目的是使用嵌入式 MongoDB 进行上述测试。 当我运行它时,会弹出以下错误:

2017-03-05 17:14:51.993 ERROR 27857 --- [ main] o.s.boot.SpringApplication : Application startup failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mController' defined...

在堆栈跟踪的末尾有

java.lang.IllegalStateException: Invalid mongo configuration, either uri or host/port/credentials must be specified

我的应用程序属性:

server.port=8090
spring.data.mongodb.uri=mongodb://localhost:27017/test
spring.data.mongodb.port=27017

如何解决这个问题? 提前致谢。

最佳答案

您可以尝试使用 EmbeddedMongoFactoryBean 类为 mongoTemplate 创建一个 @Bean 吗?例如:

@Bean
public MongoTemplate mongoTemplate() throws IOException {
    EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
    mongo.setBindIp("127.0.0.1");
    MongoClient mongoClient = mongo.getObject();
    MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "some_database");
    return mongoTemplate;
}

关于java - 在 Spring Boot 应用程序中使用嵌入式 MongoDb 和 MongoTemplate 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42610242/

相关文章:

java - 从多个应用程序/进程记录到单个日志文件

java - JPA:EntityManager.find() 是否总是为相同的键返回相同的对象引用?

ruby - 使用 Mongoid 将 allowDiskUse 参数添加到 db.collection.aggregate() 查询

java - @Mapping @Mapper 错误 不存在源参数

java - 无法同步数据库状态

node.js - Mongoose 计算嵌入文档数组中的某些元素

mongodb - 如何在mongodb中更快地进行不同的操作

java - 方法返回 null 时的处理

Spring Boot-每个配置文件多个属性文件

java - 找不到 Spring-MVC bean 类