Spring boot嵌入式MongoDb数据预填充

时间:2017-04-11 09:03:06

标签: mongodb unit-testing spring-boot spring-data-mongodb fongo

我想知道是否有像Flyway这样的工具可以帮助mongodb进行数据库初始化/迁移。我的一些想法是

  1. 我使用flapdoodle作为springboot的嵌入式mongo。这工作正常,但我需要手动将数据放入其中。
  2. 对于使用mongo db的Junit测试,我使用nosqlunit。这与Fongo(Fake mongo)完美搭配。它支持从json文件读取数据,并在启动期间使用数据预填充数据库。但这只适用于junit,因为这是一个JUnit扩展。
  3. 我正在寻找的是上述两者的混合,一个嵌入式mongo,它不仅可以与JUnit一起使用,还可以预先填充给定json的数据(类似于Flyway中的V1__init.sql)
    有没有这样的工具?

3 个答案:

答案 0 :(得分:3)

您也可以使用Mongobee。如果在应用程序加载时运行更改集

Maven依赖

 <dependency>
    <groupId>com.github.mongobee</groupId>
    <artifactId>mongobee</artifactId>
</dependency>

您需要在上下文xml文件中为Mongobee创建bean

<bean id="mongobee" class="com.github.mongobee.Mongobee">
<constructor-arg ref="mongo"/>
<property name="dbName" value="${mongo.databaseName}"/>
<property name="enabled" value="true"/>
<property name="changeLogsScanPackage" value="basepackagewherechangesetispresent"/>

现在添加变更集类

@ChangeLog(order = "1")
public class DatabaseChangeLog {

 @ChangeSet(order = "101", id = "somelogicalnameforthischangeset", author = "nameofpersonwhodidthischange")
 public void setupSeedData(MongoTemplate mongoTemplate) { 
    // run your datasetup, prefill,migration here.
 }

就像flyway一样,它也维护着架构版本表,因此相同的更改集不会在同一环境中再次运行。

答案 1 :(得分:1)

最后,我为Mongo开发了这个简单版本的数据预填充。这是代码。

https://github.com/pvpkiran/mongoprefill

鉴于种子数据,此自动配置会填充mongo。

答案 2 :(得分:-1)

您可以使用flapdoodle

在测试期间导入JSON数据

在此处查看类似问题的答案:Import JSON file in Mongo db using Spring Data Embedded Mongo