После закрытия Tomcat мы увидели много ошибок относительно возможной утечки памяти, поскольку Tomcat не смог остановить поток. Согласно Tomcat, у нас было ~ 2600 потоков демона, которые ждут в com.sun.jndi.ldap.Connection.pauseReader.Соединения LDAP не закрываются при использовании LdapTemplate
Мы используем LdapTemplate для чтения данных из LDAP. LdapTemplate создается каждый раз, когда нам нужно читать данные из LDAP. Из документации я вижу, что все ресурсы освобождаются LdapTemplate после завершения поиска. Мы не включили объединение для LdapTemplate, а значение по умолчанию - false.
После отладки это выглядит так, что потоки, созданные для соединения, не уничтожаются сразу после завершения поиска, но некоторые из них в конечном итоге уничтожаются.
Любая идея, почему у нас будет так много потоков демона, ожидающих на com.sun.jndi.ldap.Connection.pauseReader?
Мы используем spring-ldap 2.0.2.RELEASE.
Пример кода о том, как мы создаем LdapTemplate перед выполнением поиска:
LdapContextSource contextSource = new LdapContextSource();
SimpleAuthenticationSource authenticationSource = new SimpleAuthenticationSource(userDn, password);
contextSource.setAuthenticationSource(authenticationSource);
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
ldapTemplate.setIgnorePartialResultException(true);
Update: После настройки объединены истина соединения высвобождаются в порядке.
ldapContextSource.setPooled(true);
Проблема в том, что мы не можем использовать пул. Я до сих пор не понимаю, почему, когда не используется пул, соединения не выпущены должным образом.
Можно ли привести пример использования LdapTemplate, Spring версии и таких вещей, это может быть полезно – karelss