Есть ли способ запустить MongoDB Server с помощью Java-программирования?

1

Он может подключаться к базе данных, когда мы запускаем сервер mongod вручную. Но я хочу запустить сервер MongoDB с помощью кода Java, так есть ли способ сделать это?

Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("@NEW_DB");
  • 0
    Есть способы, но есть, вероятно, лучший подход. Пожалуйста, объясните, что вы пытаетесь сделать.
Теги:

4 ответа

1

В этом случае вам нужно приложение, которое запускается на сервере и получает команду из вашего клиентского приложения для запуска сервера mongo db.

Если на стороне сервера нет какого-либо приложения "слушателя команд", а сервер mongodb не работает, вы не сможете его запустить.

Создайте приложение, которое выполняется на сервере и прослушивает сетевой порт.

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

Чтобы запустить внешний процесс из вашего java-кода, рассмотрите класс ProcessBuilder.

Я лично предпочитаю использовать Apache Commons Exec для этой цели.

1

Если на локальном компьютере не mongod процесс mongod, вам нужно запустить его. Существуют разные способы запуска другой программы из Java-программы.

Самый грубый способ - использовать Runtime.exec(String) который выполняет команду, как если бы она была введена в командную оболочку операционной системы. Он возвращает объект Process который позволяет вам получить результат процесса, который вы запускаете, и дает вам некоторый контроль над процессом.

Более сложным, но более сложным способом является использование класса ProcessBuilder. Основное преимущество заключается в том, что построитель процессов позволяет вам писать код, который более независим от операционной системы.

Имейте в виду, что любой метод работает только тогда, когда mongodb работает на том же сервере, что и ваше приложение. В обычной производственной установке mongodb работает на нескольких выделенных серверах, которые физически отделены от сервера приложений. Запуск процесса на другой машине не так просто по понятным причинам. Имеются программные решения, позволяющие удаленно управлять несколькими процессами на многих серверах одновременно (администраторы сервера в нашей компании, такие как Control-M), но это относится к области администрирования серверов.

0

Там независимая от платформы оболочка, которая будет загружать и запускать запрошенный бинарный файл MongoDB: https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo

Вам нужно будет внести некоторые изменения в свою тестовую конфигурацию, но в противном случае это замена. Он работает для нас без проблем.

  • 0
    У меня все отлично работало в одном (очень большом) проекте, и теперь я начинаю использовать это во втором проекте. Я действительно могу рекомендовать это.
0

MongoDB не написан на Java, поэтому вам нужно запустить внешний процесс, о чем свидетельствуют предыдущие ответы.

Если вы хотите запустить и отключить MongoDB для тестов интеграции, есть тестовая среда, которая сделает это: https://github.com/lordofthejars/nosql-unit/.

В вашем тесте JUnit 4:

import static com.lordofthejars.nosqlunit.mongodb.ManagedMongoDb.MongoServerRuleBuilder.newManagedMongoDbRule;

@ClassRule
public static ManagedMongoDb managedMongoDb = newManagedMongoDbRule().build();

IIRC, он загрузит и запустит новый экземпляр MongoDB на localhost: 27017 по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню