2016-07-13 14 views
1

Итак, у меня есть проект, в котором я использую Spring-Data-Redis для кэширования некоторых данных. Spring-Data-Redis настроен с помощью Jedis с использованием конфигурации Bean.Использование параметра JedisPoolConfig * blockWhenExhausted *

Я искал параметры JedisPoolConfig, которые можно изменить, чтобы контролировать поведение моего кэширования и приложения.

Я хотел бы узнать об использовании объекта, blockWhenExhausted, который является частью настраиваемых свойств. Значение по умолчанию указано как true, какое поведение вызывает это значение по умолчанию? Если значение изменено на false, какое поведение это принесет?

ответ

1

Значение изменяет поведение GenericObjectPool.borrowObject(long borrowMaxWaitMillis)

Заимствуйте объект из пула с помощью определенного времени ожидания, которая применяется только тогда, когда BaseGenericObjectPool.getBlockWhenExhausted() истинно.

Что означает, когда вы устанавливаете blockWhenExhausted в false время, указанное с borrowMaxWaitMillis не будет использоваться, и вызов borrowObject будет блокировать до тех пор, пока не будет простаивает Jedis соединение из пула доступных.

Если пул не будет исчерпан (нет доступных холостых экземпляров и не способность создавать новые), этот метод будет либо блок (если BaseGenericObjectPool.getBlockWhenExhausted() истинно) или бросить NoSuchElementException (если BaseGenericObjectPool.getBlockWhenExhausted () ложно)

Но интересно я не мог видеть, что JedisPool реализация фактически использует метод borrowObject(long borrowMaxWaitMillis). Я мог видеть только, что loanObject (без параметра) вызывается во время getResource (in the version 3.0.0-SNAPSHOT). Поэтому я не уверен, что описанное поведение также применимо к JedisPool.