【发布时间】:2017-11-08 17:17:30
【问题描述】:
我不想安装完整的 mongodb,所以我用以下 pom 创建了一个简单的 spring-boot 应用程序:
<!-- This dependency is to have an embedded mongodb -->
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>1.50.5</version>
</dependency>
<!-- while this provides a spring factory bean for the embedded mongodb -->
<dependency>
<groupId>cz.jirutka.spring</groupId>
<artifactId>embedmongo-spring</artifactId>
<version>RELEASE</version>
</dependency>
<!-- finally this one is the spring-boot starter for mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>${spring.boot.version}</version>
</dependency>
它工作正常,但在应用程序关闭时我丢失了所有存储的数据。
我注意到数据库是在一个临时文件夹中创建的
C:\Users\myUser\AppData\Local\Temp\embedmongo-db-78beadc3-fa16-4101-afb1-ea7496f6f90c 并且每次重新启动应用程序时,都会在同一位置创建另一个具有不同 ID 的文件夹。
那么,是否可以指定应在何处创建数据库以保留现有数据库而不丢失所有数据?就像你对 h2 或 sqllite 所做的那样?
【问题讨论】:
-
只是出于好奇:为什么要选择专门设计用于针对数据大小进行多机部署的 DBMS > 单机可以存储什么,然后然后使用嵌入式版本它?即使在单元测试中,这也没有任何意义,因为应该在那里模拟 DB(“预期与实际行为”的事情,你知道),并且集成测试环境应该尽可能地类似于实际环境。阅读:与生产中相同的版本,相同的设置,必要时缩小规模。只是问...
-
好吧,@MarkusWMahlberg,想象一下您的客户不想在他的环境中安装任何额外软件的情况,因为已经有太多事情需要处理了。而且你非常想在你的产品中使用数据库,因为它会让你的工作变得更容易。
-
@LiebsterKamerad 听起来像是“我想吃蛋糕。”在这两种情况下。至于客户,我做了相当多的需求管理,但这是我从未遇到过的需求。如果客户真的想要一个产品,他就要安装先决条件。至于开发人员,我会并且确实认为它没有。使用 Docker for Desktop 运行 MongoDB 实例实际上只需要一行
docker run -p 27017:27017 -n myMongo mongo,并且不会仅仅为了方便而引入依赖关系,同时消除了灵活性和可扩展性。 -
@MarkusWMahlberg 我完全同意你的看法,但至少对于我们的一些客户来说,Docker 也不是一个立即适用的选择(除了纯粹的官僚原因之外没有其他原因)。
标签: java spring mongodb spring-boot embedded-database