MongoDB: IllegalStateException: пул закрыт сообщение об ошибке в приложении Spring Boot - PullRequest
0 голосов
/ 24 октября 2019

Я получаю это информационное сообщение:

19-октябрь-24 08: 05: 53: 481 ИНФОРМАЦИЯ Поток-4 omdconnection: 71 - Закрытое соединение [connectionId {localValue: 35, serverValue: 38}] to mongodb: 27017, поскольку пул был закрыт.

А также следующие ошибки:

java.lang.IllegalStateException: пул закрыт вcom.mongodb.internal.connection.ConcurrentPool.get (ConcurrentPool.java:137) в

java.lang.IllegalStateException: состояние должно быть: открыто в com.mongodb.assertions.Assertions.isTrue (Assertions.java): 70)

Вот как я создаю MongoClient, просто и просто:

@Bean
@Override
public MongoClient mongoClient() {
    return new MongoClient(host);
}

Этот ТАК ответ предлагает установить socketKeepAlive(true) но, насколько я понимаю, этот метод устарел, поскольку по умолчанию он является истинным.

  • Я использую MongoTemplate и MongoRepository.
  • Приложение (как упомянуто выше) является мульти

Я бы хотел понять, что означает ошибка? (то есть, почему пул когда-либо будет закрыт?).

Возможно, мне нужно установить / настроить некоторые параметры Spring-Boot? Нужно ли собирать MongoClient по-другому?

1 Ответ

2 голосов
/ 28 октября 2019

Эта ошибка означает, что ваши подключения MongoDB по какой-то причине закрыты, и вы пытаетесь использовать этот пул соединений.

Если вы используете пул соединений пружин, вы можете создать пул соединений без пружины и управлятьсоединение когда закрыто. (Как переподключение при ошибках)

Если вы выполняете многопоточные операции, измените MongoClient bean Scope и создайте его на основе потока . Mongoclient создает пул соединений в фоновом режиме и предоставляет уже объединенные соединения вновь созданным клиентам, поэтому клиенты на основе потоков не будут создавать соединения при каждой операции автопроводки.

Если вы хотите использовать функцию socketKeepAlive, вам нужнодайте варианты как это:

MongoClientOptions options = MongoClientOptions.builder()
                .socketKeepAlive(false)
                .build();

MongoClient mongoClient = new MongoClient( "yourhost:mongoport" ,  options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...