java - 嵌入 Mongodb 到 Spring Boot 总是重新创建数据库

标签 java mongodb spring-boot

我需要将 Mongodb 嵌入到 Spring Boot 应用程序中。但我的做法 每次我启动应用程序时,它都会导致重新创建 mongo db。我的意思是,我的文档不会持久保存到数据库中。

我在日志中看到的每次启动:

2017-11-22 12:03:49.188  INFO 10464 --- [           main] c.j.s.embedmongo.EmbeddedMongoBuilder    : Initializing embedded MongoDB instance
2017-11-22 12:03:49.215  INFO 10464 --- [           main] d.f.embed.process.store.Downloader       : Extract C:\Users\lev\.embedmongo\win32\mongodb-win32-x86_64-2008plus-3.2.1.zip : starting...
2017-11-22 12:03:49.483  INFO 10464 --- [           main] d.f.embed.process.store.Downloader       : Extract C:\Users\lev\.embedmongo\win32\mongodb-win32-x86_64-2008plus-3.2.1.zip : extract mongodb-win32-x86_64-2008plus-3.2.1/bin/mongod.exe
2017-11-22 12:03:49.484  INFO 10464 --- [           main] d.f.embed.process.store.Downloader       : Extract C:\Users\lev\.embedmongo\win32\mongodb-win32-x86_64-2008plus-3.2.1.zip : noting left
2017-11-22 12:03:49.484  INFO 10464 --- [           main] d.f.embed.process.store.Downloader       : Extract C:\Users\lev\.embedmongo\win32\mongodb-win32-x86_64-2008plus-3.2.1.zip : finished
2017-11-22 12:03:49.484  INFO 10464 --- [           main] c.j.s.embedmongo.EmbeddedMongoBuilder    : Starting embedded MongoDB instance
2017-11-22 12:03:51.180  INFO 10464 --- [           main] d.f.embed.process.runtime.Executable     : start de.flapdoodle.embed.mongo.config.MongodConfigBuilder$ImmutableMongodConfig@867ba60
2017-11-22 12:03:51.383  INFO 10464 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:3707], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2017-11-22 12:03:51.418  INFO 10464 --- [-localhost:3707] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:1}] to localhost:3707
2017-11-22 12:03:51.419  INFO 10464 --- [-localhost:3707] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:3707, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 1]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=432755}
2017-11-22 12:03:51.509  INFO 10464 --- [           main] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:2}] to localhost:3707
2017-11-22 12:03:51.939  WARN 10464 --- [           main] o.s.d.m.c.m.BasicMongoPersistentProperty : Customizing field name for id property not allowed! Custom name will not be considered!

这部分可能会导致数据库覆盖: 下载器:解压 C:\Users\lev.embedmongo\win32\mongodb-win32

我的 Pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>guru.springframework</groupId>
    <artifactId>spring-boot-mongodb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>spring-boot-mongodb</name>
    <description>Demo project for Spring Boot and Mongo DB</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
        </dependency>

        <dependency>
            <groupId>cz.jirutka.spring</groupId>
            <artifactId>embedmongo-spring</artifactId>
            <version>RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

存储文档的 Controller :

@RequestMapping("/check")
@ResponseBody
public List<Domain> check(){
    System.out.println("/check");
    Domain domain = new Domain(i++, "Check_"+String.valueOf(i), true); 
    dm.save(domain);
    return dm.findAll();
}

存储库:

public interface DomainRepository extends MongoRepository<Domain, Long> {

    Domain findFirstByDomain(String domain);

    Domain findByDomainAndDisplayAds(String domain, boolean displayAds);

    //Supports native JSON query string
    @Query("{domain:'?0'}")
    Domain findCustomByDomain(String domain);

    @Query("{domain: { $regex: ?0 } })")
    List<Domain> findCustomByRegExDomain(String domain);

}

应用程序属性:

server.port = 8091
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.database=testme

如何解决这个问题?

最佳答案

由于它是嵌入式,因此每次启动应用程序时,都会重新创建数据库,因为应用程序停止时前一个数据库已被删除。

关于java - 嵌入 Mongodb 到 Spring Boot 总是重新创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47428030/

相关文章:

java - Android 如何在点击按钮时首先在日期选择器中显示年份

java - 如何在 Java 中检查字符串是否为字母数字

java - Telegram 机器人 - 内联模式

java - 将数字转换为排名 - Java

mongodb - 在 find() 中动态分配 mongo 选择器

spring-boot - 使用 Kotlin 协程的 Spring Boot Rest 服务

javascript - 如何使用异步函数?

node.js - 通过 mongoose 更新不带 ObjectId 的条目

java - 使用@Autowired 调用构造函数如何工作?

java - 无法向 Spring Boot Hibernate JPA 中的现有表添加其他列