在Spring Boot应用程序中使用嵌入式MongoDb以及MongoTemplate失败

时间:2017-03-05 15:33:19

标签: 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组:“de.flapdoodle.embed”,名称:   “de.flapdoodle.embed.mongo”,版本:“2.0.0”

  

编译( “org.springframework.boot:弹簧引导起动数据mongodb的”)

有使用MongoTemplate的控制器

@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 --- [主要]   o.s.boot.SpringApplication:应用程序启动失败

     

org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名为'mController'的bean时出错......

并且在堆栈跟踪中有

  

java.lang.IllegalStateException:mongo配置也无效   必须指定uri或主机/端口/凭证

我的应用程序属性:

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

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

1 个答案:

答案 0 :(得分:1)

您可以尝试使用@Bean课程为mongoTemplate创建EmbeddedMongoFactoryBean吗? e.g:

@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;
}