首页 文章

如何配置两个实例mongodb使用spring boot和spring数据

提问于
浏览
2

第一个实例是嵌入式MongoDb,第二个实例是实时MongoDb . 它如何配置使用 spring 数据和 spring 启动 . 如何通过属性文件轻松切换这些实例?

UPDATE

  • 默认情况下,应用程序应启动内置数据库并将数据存储到APPDIR / db目录中

  • 应该可以通过配置mongo.url属性让应用程序知道将使用外部数据库 . 在这种情况下,无需启动内部数据库 . 而不应该使用外部连接

请粘贴一些配置 .

UPDATE 我有:

<!--Embedded MongoDB-->
<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>1.50.5</version>
</dependency>

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.uri=mongodb://localhost/test
spring.data.mongodb.database=test

# EMBEDDED MONGODB (EmbeddedMongoProperties)
#spring.mongodb.embedded.storage.databaseDir=c:/db
#spring.mongodb.embedded.version=3.2.2

如果我将指定外部mongodb,那么我希望嵌入式mongodb不应该启动 .

java.io.IOException: Could not start process: <EOF>
    at de.flapdoodle.embed.mongo.AbstractMongoProcess.onAfterProcessStart(AbstractMongoProcess.java:79) ~[de.flapdoodle.embed.mongo-1.50.5.jar!/:?]
    at de.flapdoodle.embed.process.runtime.AbstractProcess.<init>(AbstractProcess.java:114) [de.flapdoodle.embed.process-1.50.2.jar!/:?]
    at de.flapdoodle.embed.mongo.AbstractMongoProcess.<init>(AbstractMongoProcess.java:53) [de.flapdoodle.embed.mongo-1.50.5.jar!/:?]
    at de.flapdoodle.embed.mongo.MongodProcess.<init>(MongodProcess.java:50) [de.flapdoodle.embed.mongo-1.50.5.jar!/:?]
    at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:44) [de.flapdoodle.embed.mongo-1.50.5.jar!/:?]
    at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:34) [de.flapdoodle.embed.mongo-1.50.5.jar!/:?]
    at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:101) [de.flapdoodle.embed.process-1.50.2.jar!/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_05]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_05]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_05]

1 回答

  • 3

    我想你可以使用Spring配置文件 .

    这是documentation .

    Spring Profiles提供了一种隔离应用程序配置部分的方法,并使其仅在某些环境中可用 .

    更新

    Note : 我将在上面提到的文档中说明我将在下面讨论的所有内容......您应该仔细阅读本文档 . 这个文档很棒(不是开玩笑) .

    来自Appendix A. Common application properties(Spring启动文档)

    以下是在 application.properties 中配置远程MongoDB实例的方法:

    # MONGODB (MongoProperties)
    spring.data.mongodb.authentication-database= # Authentication database name.
    spring.data.mongodb.database=test # Database name.
    spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
    spring.data.mongodb.grid-fs-database= # GridFS database name.
    spring.data.mongodb.host=localhost # Mongo server host.
    spring.data.mongodb.password= # Login password of the mongo server.
    spring.data.mongodb.port=27017 # Mongo server port.
    spring.data.mongodb.repositories.enabled=true # Enable Mongo repositories.
    spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored.
    spring.data.mongodb.username= # Login user of the mongo server.
    

    以下是如何在 application.properties 中配置嵌入式MongoDB实例:

    # EMBEDDED MONGODB (EmbeddedMongoProperties)
    spring.mongodb.embedded.features=SYNC_DELAY # Comma-separated list of features to enable.
    spring.mongodb.embedded.storage.databaseDir= # Directory used for data storage.
    spring.mongodb.embedded.storage.oplogSize= # Maximum size of the oplog in megabytes.
    spring.mongodb.embedded.storage.replSetName= # Name of the replica set.
    spring.mongodb.embedded.version=2.6.10 # Version of Mongo to use.
    

    来自Change configuration depending on the environment(Spring启动文档)

    要对属性文件执行相同操作,可以使用application - $ .properties指定特定于配置文件的值 .

    您可以将MongoDB嵌入式配置定义为 application-dev.properties ,将MongoDB远程配置定义为 application-prod.properties

    更新II:回归

    我假设您在类(从documentation)开始嵌入式MongoDB实例:

    import de.flapdoodle.embed.mongo.config.ArtifactStoreBuilder;
    
        ...
        MongodStarter starter = MongodStarter.getDefaultInstance();
    
        String bindIp = "localhost";
        int port = 12345;
        IMongodConfig mongodConfig = new MongodConfigBuilder()
            .version(Version.Main.PRODUCTION)
            .net(new Net(bindIp, port, Network.localhostIsIPv6()))
            .build();
    
        MongodExecutable mongodExecutable = null;
    

    您可以将 spring 配置文件分配给此类(来自documentation):

    @Configuration
    @Profile("dev")
    public class ProductionConfiguration {
    
        // ...
    
    }
    

    这样,只有在选择 dev profile时才会启动嵌入式MongoDB .

相关问题