Spring boot Embedded MongoDb 数据预填充

Posted

技术标签:

【中文标题】Spring boot Embedded MongoDb 数据预填充【英文标题】:Spring boot Embedded MongoDb data prefilled 【发布时间】:2017-09-06 13:39:56 【问题描述】:

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

    我使用flapdoodle 作为带有springboot 的嵌入式mongo。这工作正常,但我需要手动将数据放入其中。 对于使用 mongo db 的 Junit 测试,我使用 nosqlunit。这与 Fongo(假 mongo)完美配合。它支持从 json 文件中读取数据并在启动期间用数据预填充数据库。但这仅适用于 junit,因为这是一个 JUnit 扩展。

我正在寻找的是上述两者的混合,一个嵌入式 mongo,它不仅可以与 JUnit 一起使用,而且可以从给定的 json 中预填充数据(类似于 Flyway 中的 V1__init.sql) 有没有这样的工具?

【问题讨论】:

【参考方案1】:

您也可以为此使用 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 一样,它也维护模式版本表,因此相同的更改集不会在相同的环境中再次运行。

【讨论】:

【参考方案2】:

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

https://github.com/pvpkiran/mongoprefill

给定种子数据,这个自动配置会填满 mongo。

【讨论】:

【参考方案3】:

您可以在测试期间使用 flapdoodle 导入 JSON 数据

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

【讨论】:

再次阅读我的问题。我不是在谈论测试。我说的是常规应用启动 @pvpkiran 嗨,代码显示了如何使用 fladdoodle 将数据“手动”导入 MongoDB。这正是您要问的(第 1 点),而且您也在讨论问题中的测试,但是尽管代码示例在测试类中,但您也可以在应用程序的“普通”java 类中使用它.

以上是关于Spring boot Embedded MongoDb 数据预填充的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot Embedded MongoDb 数据预填充

Spring-Boot Embedded Tomcat - 生成 localhost.log 和 cataline.out 文件

Spring Boot 使用Jar打包发布, 并使用 Embedded Jetty/Tomcat 容器

Spring Boot Embedded Derby 在最新版本中不起作用。

我如何在@Embeddable 类中使用@Embedded 将json 发布到spring boot 控制器

如何使用 Embedded Tomcat 8 和 Spring boot 将子域转换为路径