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

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

UPDATE

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

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

请粘贴一些配置。

更新我有:

  de.flapdoodle.embed de.flapdoodle.embed.mongo 1.50.5  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:  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.(AbstractProcess.java:114) [de.flapdoodle.embed.process-1.50.2.jar!/:?] at de.flapdoodle.embed.mongo.AbstractMongoProcess.(AbstractMongoProcess.java:53) [de.flapdoodle.embed.mongo-1.50.5.jar!/:?] at de.flapdoodle.embed.mongo.MongodProcess.(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配置文件。

这是文档 。

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

UPDATE

注意:我将在上面提到的文档中指出我将在下面讨论的所有内容……您应该真正了解本文档。 这个文档很棒(不是开玩笑)。

来自附录A.常见应用程序属性 (Spring启动文档)

以下是在application.properties配置远程MongoDB实例的application.properties

 # 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. 

根据环境更改配置 (Spring启动文档)

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

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

更新II:回归

我假设您在类(从文档 )中启动嵌入式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; 

您可以将弹簧配置文件分配给此类(如文档 ):

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

这样,只有在选择dev配置文件时才会启动嵌入式MongoDB。