Мои коллеги, поддерживающие нашу инфраструктуру LDAP, обратились ко мне сегодня, потому что мое приложение на основе UnboundID LDAP SDK установило слишком много соединений, хотя я использовал пул соединений.Саму проблему было довольно легко решить, потому что я установил неверное значение для возраста соединения, теперь я установил его на бесконечность.
pool.setMaxConnectionAgeMillis(0);
pool.setMaxDefunctReplacementConnectionAgeMillis(null);
pool.setMaxWaitTimeMillis(3000L);
pool.setHealthCheckIntervalMillis(10000L);
Я спросил себя, какая проверка работоспособности запускает SDK, и pool.getHealthCheck()
сказал мнечто это com.unboundid.ldap.sdk.LDAPConnectionPoolHealthCheck
, что - если я правильно понимаю документы - в основном является реализацией "по умолчанию в true", которая возвращает успех для всех проверок работоспособности.
Я видел, что SDKпредлагает следующие подклассы:
- AggregateLDAPConnectionPoolHealthCheck
Но ни один из них, кажется, не делает низкий уровень и общую проверку.Они либо специфичны для определенных серверов LDAP (ReportBindResultLDAPConnectionPoolHealthCheck
), либо выполняют дополнительные действия (PruneUnneededConnectionsLDAPConnectionPoolHealthCheck
), либо зависят от определенной схемы LDAP (GetEntryLDAPConnectionPoolHealthCheck
).То, что я ищу, - это что-то общее, например, SELECT 1 FROM DUAL
будет работать на сервере Oracle SQL и работает на всех LDAP.
Я даже спросил себя, могу ли я придерживаться стандартной проверки работоспособности, увеличить интервал проверки работоспособности и полагатьсятолько при проверке запускается SDK, когда используется пул соединения.