В Java-коде я выполняю Mongo BulkWriteOperation с использованием API BulkWriteOperation.
BulkWriteOperation bulkop = col.initializeUnorderedBulkOperation();
.......
bulkop.execute();
Иногда execute()
выдает BulkWriteException
, когда возникает какая-либо проблема с MongoDB.
В случае этого исключения, чтобы повторить массовую запись, я написал ниже код с try-catch
:
int count = 0;
int maxTries = 3;
while (true) {
try {
result = bulkop.execute();
} catch (BulkWriteException e) {
logger.info("Error during bulkUserUpdate, going to re-try", e);
try {
Thread.sleep(new Random().nextInt(10000));
} catch (InterruptedException e1) {
}
if (++count == maxTries)
throw e;
}
}
С кодом выше, если BulkWriteException
встречается в блоке try
первоговызов execute()
, затем в блоке catch
я получаю java.lang.IllegalStateException- state already executed
при втором вызове execute ().
Я проверил реализацию метода BulkWriteOperation.execute()
и обнаружил, что API внутренне поддерживает состояние в объекте BulkWriteOperation и установил его на already executed
после первого вызова.
Я хочу повторить BulkWriteOperation без повторной инициализации объекта BulkWriteOperation.
Пожалуйста, дайте мне знать, как можно выполнить попытку BulkWriteOperation в случае исключений