如何配置两个实例mongodb使用spring boot和spring data
Posted
技术标签:
【中文标题】如何配置两个实例mongodb使用spring boot和spring data【英文标题】:How to configure two instance mongodb use spring boot and spring data 【发布时间】:2017-04-27 09:57:15 【问题描述】:第一个实例是嵌入的 MongoDb,第二个实例是实时的 MongoDb。 它如何配置使用弹簧数据和弹簧启动。如何通过属性文件轻松切换这些实例?
更新
默认情况下,应用程序应该启动内置数据库并存储数据 进入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]
【问题讨论】:
【参考方案1】:我认为你可以使用 Spring 配置文件。
这是documentation。
Spring Profiles 提供了一种分离应用程序部分的方法 配置并使其仅在某些环境中可用。
更新
注意: 我将在下面讨论的所有内容都在我上面提到的文档中进行了说明...您应该真正看看这个文档。这个文档很棒(不是开玩笑)。
来自Appendix A. Common application properties(Spring Boot 文档)
下面是在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 Boot 文档)
要对属性文件做同样的事情,您可以使用
application-$profile.properties
指定配置文件特定的值。
您可以将 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;
您可以为此类分配一个弹簧配置文件,例如(来自documentation):
@Configuration
@Profile("dev")
public class ProductionConfiguration
// ...
这样,您的嵌入式 MongoDB 只有在您选择 dev
配置文件时才会启动。
【讨论】:
你能粘贴一些配置吗? 我了解如何使用 spring 配置文件,我不了解如何配置两个实例 mongo db 使用 spring data 和 spring boot 谢谢你,对我有用)以上是关于如何配置两个实例mongodb使用spring boot和spring data的主要内容,如果未能解决你的问题,请参考以下文章
如何解决spring bean通过this访问实例方法时@Transactional失效
Spring data mongodb querydsl 环境配置
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
如何使用 spring security 和 spring boot 对 Google 用户进行身份验证,将 mongoDB 作为存储库?