Spring Boot嵌入式MongoDb数据预填充

4
我想知道是否有像Flyway一样的工具,可以协助对mongodb进行数据库初始化和迁移。我的一些想法是:
  1. 我曾经使用过嵌入式mongo和springboot一起使用flapdoodle。这很好用,但我需要手动将数据放入其中。
  2. 对于使用mongo db进行Junit测试,我使用nosqlunit。它与Fongo(Fake mongo)完美配合。它支持从json文件中读取数据,并在启动时预填充数据库。但它仅适用于junit,因为这是JUnit扩展。
我正在寻找的是以上两者的混合体,一个嵌入式mongo,不仅适用于JUnit,还可以从给定的json预填充数据(类似于Flyway中的V1__init.sql)。有这样的工具吗?
3个回答

6
你也可以使用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"/>

现在添加changeset类。
@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

请再读一遍我的问题。我不是在谈论测试,而是在谈论正常的应用程序启动。 - pvpkiran
@pvpkiran 你好,这段代码展示了如何使用flapdoodle“手动”将数据导入MongoDB。这正是你所问的(第一点),而且你在问题中也提到了测试,然而尽管代码示例在一个测试类中,你同样可以在你应用程序的“普通”Java类中使用它。 - jchrbrt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接