Как правильно отключить среду Xodus? - PullRequest
2 голосов
/ 14 июня 2019

Мне нужен способ завершить работу среды Xodus, чтобы

  • Ожидал завершения всех транзакций записи во всех потоках (или был прерван по истечении времени ожидания в качестве опции).
  • Блокирует запуск новых транзакций (или выдает исключение в качестве опции).
  • Безопасно закрывает среду.

До сих пор мы пробовали что-то подобное

if (env.isOpen()) {            
    env.clear();
    env.close();
}

но я не уверен, что это правильно, я все еще получаю исключения из env.close() время от времени.Итак, как правильно это сделать?

1 Ответ

1 голос
/ 14 июня 2019

Прежде всего, обратите внимание, что Environment#clear() просто очищает все данные в вашей среде.

Незначительно: вам не нужно проверять, открыта ли ваша среда, прежде чем закрывать ее.

Если вам не важна большая часть состояния приложения, вы можете установить опцию exodus.env.closeForcedly при создании среды:

Environment env = Environments.newInstance("db path", new EnvironmentConfig().setEnvCloseForcedly(true));

В этом случае метод close() сообщает в журналах количество незавершенныхна данный момент транзакции и в любом случае закрывают среду.

...