В нашем приложении мы управляем несколькими экземплярами MongoTemplate
, каждый из которых представляет клиентскую базу данных. Для большинства операций с базами данных мы хотим использовать предпочтение чтения secondaryPreferred
, чтобы использовать реплики чтения нашего кластера и распределить нагрузку. Однако, по крайней мере, в одном случае нам нужно прочитать с первичной, чтобы получить самые последние данные. Я не вижу способа переопределить предпочтения чтения для этого отдельного запроса. Я вижу эту проблему на плате JIRA, но она была открыта в течение 6 лет, и связанная ссылка StackOverflow устарела. Предполагая, что это не будет реализовано, я пытаюсь найти некоторые альтернативные решения. Похоже ли это на правильную оценку возможных вариантов?
- Создайте два
MongoClient
с различными предпочтениями чтения и используйте их для создания отдельного набора MongoTemplate
для основного и дополнительного читает. Я обеспокоен тем, что это, вероятно, приводит к удвоению количества подключений к кластеру (хотя, возможно, это не проблема, если все дополнительные подключения go к вторичным). - Используйте метод
MongoTemplate.setReadPreference()
для временно измените предпочтения чтения перед выполнением операции, затем сбросьте ее после завершения. Однако, похоже, что это будет уязвимо для условий гонки. - Обходите фреймворк Spring Data и используйте
executeCommand()
напрямую, который поддерживает аргумент readPreference
. Это означает, что мы потеряем все преимущества и абстракцию Spring Data и должны будем напрямую манипулировать объектами BSON. - В классе
Query
есть метод slaveOk()
, но это противоположно тому, что я Я ищу, и кажется, что он устарел.
Любая дополнительная информация также приветствуется. Спасибо!