Как настроить два экземпляра mongodb, используя весеннюю загрузку и весенние данные

Первый экземпляр - это встроенный 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 предоставляют способ разделения частей конфигурации вашего приложения и делают его доступным только в определенных средах.

ОБНОВИТЬ

Примечание. Все, о чем я расскажу ниже, указано в документации, о которой я упоминал выше... Вы действительно должны взглянуть на эту документацию. Эта документация отличная (без шуток).

Из приложения А. Общие свойства приложения (загрузочная документация Spring)

Вот как настроить удаленный экземпляр 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.

А вот как настроить встроенный экземпляр MongoDB в application.properties:

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

От изменения конфигурации в зависимости от среды (весенняя загрузочная документация)

Чтобы сделать то же самое с файлами свойств, вы можете использовать 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 {

    // ...

}

Таким образом, ваш встроенный MongoDB запускается только тогда, когда вы выбираете dev профиль.

Другие вопросы по тегам