在Spring LDAP中,当池连接无法成功连接时会发生什么?

时间:2017-08-03 13:45:20

标签: spring-ldap pooling

我正在使用Spring LDAP(2.0.2.RELEASE)与我们的AD环境进行交互。我在applicationContext.xml中集成了池。

Java LDAP docs(第3.4节)中,它陈述了

  

如果LDAP提供程序无法在该时间段内建立连接,则会中止连接尝试

我的问题是:spring是否处理此连接的重试,或者是否发生/抛出错误?我知道Spring使用了许多底层的JVM LDAP功能,但我还没有找到这方面的具体内容。

我的applicationContext的相关部分:

<bean id="dirContextValidator" class="org.springframework.ldap.pool.validation.DefaultDirContextValidator" />

<bean id="exampleConnectionDetails" class="org.springframework.ldap.core.support.LdapContextSource" scope="singleton">
    <property name="url" value="ldaps://ldap.example.com:636" />
    <property name="userDn" value="CN=LDAP_User,DC=example,DC=com" />
    <property name="password" value="superSecretPwd" />
    <property name="pooled" value="false"/>
    <property name="referral" value="follow"/>
</bean>

<bean id="exampleContextSource" class="org.springframework.ldap.pool.factory.PoolingContextSource">
    <property name="contextSource" ref="exampleConnectionDetails" />
    <property name="dirContextValidator" ref="dirContextValidator" />
    <property name="testOnBorrow" value="true" />
    <property name="testWhileIdle" value="true" />
    <property name="maxWait" value="10000" />
    <property name="whenExhaustedAction" value="0" />

    <property name="minIdle" value="5" />
    <property name="maxIdle" value="10" />
    <property name="timeBetweenEvictionRunsMillis" value="15000" />
    <property name="minEvictableIdleTimeMillis" value="30000" />
    <property name="numTestsPerEvictionRun" value="7" />
 </bean>

1 个答案:

答案 0 :(得分:0)

testOnBorrow的documentation说明了这一点,

  

testOnBorrow:指示在从池中借用对象之前是否验证对象。如果对象无法验证,它将从池中删除,并尝试借用另一个。

据我所知,Spring会在发生故障时尝试建立另一个连接。