gpt4 book ai didi

java - 如何配置两个实例mongodb使用spring boot和spring data

转载 作者:可可西里 更新时间:2023-11-01 10:02:42 28 4
gpt4 key购买 nike

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

更新

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

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

请粘贴一些配置。

更新我有:

<!--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]

最佳答案

我认为您可以使用 Spring 配置文件。

这是 documentation .

Spring Profiles provide a way to segregate parts of your application configuration and make it only available in certain environments.

更新

注意:我在下面将要讨论的所有内容都在我上面提到的文档中有所说明...您真的应该看看这个文档。这个文档很棒(不是开玩笑)。

来自 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 引导文档)

To do the same thing with properties files you can use application-${profile}.properties to specify profile-specific values.

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

更新二:返回

我假设您在类中启动嵌入式 MongoDB 实例(来自 documentation):

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 配置文件时,您的嵌入式 MongoDB 才会启动。

关于java - 如何配置两个实例mongodb使用spring boot和spring data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102476/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com