当前位置: 首页 > 知识库问答 >
问题:

如何配置两个实例mongoDB使用Spring引导和Spring数据

顾亦
2023-03-14

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

使现代化

>

通过配置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个答案

姚阳德
2023-03-14

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

这是文件。

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

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

来自附录A.通用应用程序属性(Spring Boot文档)

下面介绍如何在应用程序中配置远程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.

下面是如何在应用程序中配置嵌入式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 Boot文档)

要对属性文件做同样的事情,您可以使用应用程序-${file}。属性来指定特定于配置文件的值。

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

我假设您在一个类中启动嵌入式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配置文件分配给此类,如(从文档中):

@Configuration
@Profile("dev")
public class ProductionConfiguration {

    // ...

}

这样,只有当您选择devprofile时,嵌入式MongoDB才会启动。

 类似资料:
  • 问题内容: 我是Spring和Spring Boot的新手。如何配置和使用两个数据源? 例如,这是我对第一个数据源的需求: 应用类别 如何修改以添加另一个数据源?如何将其自动布线以供其他存储库使用? 问题答案:

  • 如何配置和使用两个数据源? 例如,下面是第一个数据源: 应用程序.属性 应用程序类 如何修改以添加另一个数据源?我如何自动将其用于不同的存储库?

  • 使用UnknownHostException checked异常污染代码。使用checked exception是不可取的,因为基于Java的bean元数据使用方法作为设置对象依赖关系的手段,这使得调用代码变得混乱。 所以Spring提议 但不幸的是,自Spring-data-mongoDB1.7以来,MongoFactoryBean已被弃用,并被MongoClientFactoryBean所取代

  • 问题内容: 我是Spring和Spring Boot的新手。如何配置和使用两个数据源? 例如,这是我对第一个数据源的需求: 应用类别 如何修改以添加另一个数据源?如何将其自动布线以供其他存储库使用? 问题答案:

  • 使用spring-boot-2.1.3、spring-kafka-2.2.4,我希望有两个流配置(例如,拥有不同的application.id,或者连接到不同的集群,等等)。因此,我几乎根据文档定义了第一个流配置,然后添加了第二个流配置,使用了不同的名称,以及第二个StreamsBuilderFactoryBean(也使用了不同的名称): 然而,当我尝试运行该应用程序时,我得到: 在org.spr

  • 我有一个带应用程序的spring boot应用程序。属性文件和spring数据jpa。在应用程序中,我有一个外部依赖项,需要加载外部Spring项目的bean,该项目具有基于xml的配置。外部xml有自己的组件扫描和spring jpa设置,可以与应用程序中提供该DB属性的其他DB进行交互。属性文件,我正在使用@ImportResources将其bean注入父应用程序。但是,当我在做这个sprin