Вынудите Spring создать новый синглтон-бин вместо поврежденного - PullRequest
0 голосов
/ 06 марта 2012

В моем приложении есть компонент, который иногда может быть поврежден, и, поскольку он является единичным, мне нужно перезапустить все приложение, чтобы обновить его. Можно ли заставить Spring уничтожить и воссоздать одноэлементный компонент и заменить все ссылки в существующих компонентах?

Если это имеет значение, это боб, который доставляет мне неприятности. Это LdapContextSource, подключающийся к нашей Active Directory. Иногда привязка перестает работать («org.springframework.ldap.CommunicationException: простое связывание не удалось»), и тогда это все, что она написала, пока я не смогу вернуть приложение.

<bean id="adContextSourceTarget" 
    class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" ref="adUrl" />
    <property name="base" ref="adBase" />
    <property name="userDn" ref="adUsername" />
    <property name="password" ref="adPassword" />
</bean>

Это приложение работает на двух серверах, и оба они не будут недоступны одновременно, так что AD не работает, похоже, что если один из серверов пытается связываться, и возникает «сбой» боб не может восстановиться. И в этом заключается мой вопрос: существует ли способ заставить Spring заменить существующий компонент Singleton новым.

1 Ответ

0 голосов
/ 06 марта 2012

Я бы порекомендовал объединить источник контекста LDAP.Если привязка не удалась, закройте соединение и проверьте другое соединение из пула:

http://static.springsource.org/spring-ldap/docs/1.1/reference/

...