对于最新稳定版本,请使用 Spring LDAP 4.0.0spring-doc.cadn.net.cn

支持池

池化 LDAP 连接有助于减轻为每次 LDAP 交互创建新 LDAP 连接的开销。虽然 Java LDAP 池化支持存在,但其配置选项和功能有限,如连接验证和池维护。Spring LDAP支持对每个-上下文来源基础。spring-doc.cadn.net.cn

池化支持通过提供<ldap:集水/>子元素映射为<ldap:context-source />应用上下文配置中的元素。只读与可读写DirContext对象被单独合并(如果匿名只读被指定)。Jakarta Commons-Pool 用于提供底层的池的实现。spring-doc.cadn.net.cn

DirContext验证

验证池连接是使用自定义池库而非JDK提供的LDAP池函数的主要动机。验证允许合并DirContext连接在从池中检查、放入池或在池中闲置时,确保它们仍然正确连接和配置。spring-doc.cadn.net.cn

如果配置了连接验证,池化连接的验证方式是:DefaultDirContextValidator.DefaultDirContextValidator是否DirContext.search(字符串,字符串,搜索控制),空名,一个Filter“objectclass=*”搜索控制设置为仅有对象类属性和500毫秒的超时。如果他们回来了命名枚举有结果,DirContext通过验证。如果没有结果返回或抛出异常,则DirContext验证失败。 默认设置应在大多数LDAP服务器上无需更改配置即可运行,并且是验证DirContext. 如果你需要自定义,可以通过使用池配置中描述的验证配置属性来实现。spring-doc.cadn.net.cn

如果连接抛出被视为非瞬态的异常,连接会自动失效。例如,如果DirContext实例抛出javax.naming.CommunicationException,该错误被解释为非瞬态错误,实例自动失效,无需额外开销测试返回操作。被解释为非瞬态的例外通过使用非瞬态例外的属性PoolingContextSource.

池配置

以下属性可在<ldap:集水/>配置 DirContext 池的元素:spring-doc.cadn.net.cn

表1。池化配置属性
属性 默认值 描述

最大主动spring-doc.cadn.net.cn

8spring-doc.cadn.net.cn

每种类型(只读或读写)同时可从该池分配的最大活跃连接数。你可以用非正数表示无限制。spring-doc.cadn.net.cn

最大总和spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

该池同时可分配的总最大活跃连接数(涵盖所有类型)。你可以用非正数表示无限制。spring-doc.cadn.net.cn

最大怠速spring-doc.cadn.net.cn

8spring-doc.cadn.net.cn

每种类型(只读或读写)中最多可在池中闲置且不释放额外连接的活跃连接数。你可以用非正数表示无限制。spring-doc.cadn.net.cn

最小怠速spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

每种类型(只读或读写)中在池中可以保持闲置且不需额外连接的最少活跃连接数。你可以用零(默认)来创建无。spring-doc.cadn.net.cn

等一下spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

池等待连接返回的最大毫秒数(当无连接可用时),然后抛出异常。你可以用非正数无限期等待。spring-doc.cadn.net.cn

当疲惫时spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

指定池子耗尽时的行为。spring-doc.cadn.net.cn

  • 失败选择投掷NoSuchElementException当泳池耗尽时。spring-doc.cadn.net.cn

  • 选项等待新对象可用时。如果等一下为正,且在 之后没有新的对象可用等一下时间已尽,NoSuchElementException被抛出。spring-doc.cadn.net.cn

  • 成长选项创建并返回一个新对象(本质上是最大主动毫无意义)。spring-doc.cadn.net.cn

借用测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

对象在借用池前是否经过验证。如果对象未能验证,则从池中丢弃,并尝试借用另一个对象。spring-doc.cadn.net.cn

回程测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

对象在返回池前是否经过验证。spring-doc.cadn.net.cn

闲置测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

对象是否被空闲对象Evictor(如果有)验证。如果对象未能验证,则从池中丢弃。spring-doc.cadn.net.cn

驱逐-跑-间隔-毫spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

闲置对象Evictor线程运行间的毫秒数。当非正时,不会运行空闲对象 Evictor 线程。spring-doc.cadn.net.cn

逐次淘汰测试spring-doc.cadn.net.cn

3spring-doc.cadn.net.cn

在每次运行空闲对象 Evictor 线程时需要检查的对象数量(如果有的话)。spring-doc.cadn.net.cn

最小-可被驱逐时间-毫spring-doc.cadn.net.cn

1000 * 60 * 30(30分钟)spring-doc.cadn.net.cn

物体在池中闲置的最短时间,即在有资格被闲置物体的“移除者”(如有)驱逐之前。spring-doc.cadn.net.cn

验证查询基spring-doc.cadn.net.cn

LdapUtils.emptyName()spring-doc.cadn.net.cn

验证连接时使用的搜索基底。仅在借用测试,回程测试闲置测试被指定。spring-doc.cadn.net.cn

验证查询Filterspring-doc.cadn.net.cn

对象类=*spring-doc.cadn.net.cn

搜索过滤器用于验证连接。仅在借用测试,回程测试闲置测试被指定。spring-doc.cadn.net.cn

验证查询-搜索-控制-参考spring-doc.cadn.net.cn

;默认搜索控制设置如上所述。spring-doc.cadn.net.cn

一个搜索控制用于验证连接时的实例。仅在借用测试,回程测试闲置测试被指定。spring-doc.cadn.net.cn

非瞬态异常spring-doc.cadn.net.cn

javax.naming.CommunicationExceptionspring-doc.cadn.net.cn

逗号分隔列表例外类。上述例外被视为非暂时的,适用于急于无效的。如果调用池时抛出上述任何例外(或其子类)是否会被抛出DirContext实例,该对象会自动失效,无需额外的testOnReturn作。spring-doc.cadn.net.cn

Pool2配置

以下属性可在<ldap:pooling2 />用于配置DirContext池:spring-doc.cadn.net.cn

表2。池化配置属性
属性 默认值 描述

最大总和spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

该池同时可分配的总最大活跃连接数(涵盖所有类型)。你可以用非正数表示无限制。spring-doc.cadn.net.cn

每键最大总数spring-doc.cadn.net.cn

8spring-doc.cadn.net.cn

每个键对池分配对象实例数量(已检出或空闲)的限制。当达到极限时,子池将耗尽。负值表示无限制。spring-doc.cadn.net.cn

每个键的最大闲置spring-doc.cadn.net.cn

8spring-doc.cadn.net.cn

每种类型(只读或读写)中最多可在池中保持空闲且不释放额外连接的最大活跃连接数。负值表示无限制。spring-doc.cadn.net.cn

每键最小闲置spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

每种类型(只读或读写)中在池中可保持闲置且不额外连接的最少活跃连接数。你可以用零(默认)来创建无。spring-doc.cadn.net.cn

等一下spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

池等待(当没有可用连接时)返回连接的最大毫秒数,然后才抛出异常。你可以用非正数无限期等待。spring-doc.cadn.net.cn

耗尽时的阻塞spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否等到有新对象时再说。如果最大等待为正,则NoSuchElementException如果在max等等时间到了。spring-doc.cadn.net.cn

测试-即刻创作spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

借用对象是否经过验证。如果对象未能验证,则借用失败。spring-doc.cadn.net.cn

借用测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

用于指示在从池中借用对象是否经过验证。如果对象未能验证,则从池中丢弃,并尝试借用另一个对象。spring-doc.cadn.net.cn

回程测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

用于指示对象在返回池前是否经过验证。spring-doc.cadn.net.cn

闲置测试spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

用于指示对象是否被闲置对象 evictor(如果有)验证。如果对象未能验证,则从池中丢弃。spring-doc.cadn.net.cn

驱逐-跑-间隔-毫spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

闲置对象Evictor线程运行间的毫秒数。当非正时,不会运行空闲对象 Evictor 线程。spring-doc.cadn.net.cn

逐次淘汰测试spring-doc.cadn.net.cn

3spring-doc.cadn.net.cn

在每次运行空闲对象 Evictor 线程时需要检查的对象数量(如果有的话)。spring-doc.cadn.net.cn

最小-可被驱逐时间-毫spring-doc.cadn.net.cn

1000 * 60 * 30(30分钟)spring-doc.cadn.net.cn

物体在池中闲置的最短时间,即在有资格被闲置物体的“移除者”(如有)驱逐之前。spring-doc.cadn.net.cn

软最小可驱逐时间毫厘spring-doc.cadn.net.cn

-1spring-doc.cadn.net.cn

物体在池中闲置的最短时间,在被闲置对象的Evictor有资格驱逐之前,额外条件是每个密钥中至少保留最少数量的对象实例。该设置被 覆盖最小-可被驱逐时间-毫如果它被设置为正值。spring-doc.cadn.net.cn

驱逐-政策-类别spring-doc.cadn.net.cn

org.apache.commons.pool2.impl.DefaultEvictionPolicyspring-doc.cadn.net.cn

该池使用的驱逐政策实施。池尝试通过线程上下文类加载器加载该类。如果失败,池会尝试用加载该类的类加载器来加载该类。spring-doc.cadn.net.cn

公平spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

池为那些等待借用连接的线程提供公平服务。true这意味着等待的线程就像在FIFO队列中等待一样被服务。spring-doc.cadn.net.cn

jmx-enablespring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

JMX 通过 MBean 平台的池服务器启用。spring-doc.cadn.net.cn

jmx-名称-基底spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

JMX名称基底作为分配给JMX支持池的名称的一部分。spring-doc.cadn.net.cn

jmx-name-前缀spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

JMX名称前缀,作为分配给JMX支持池的名称的一部分。spring-doc.cadn.net.cn

先进spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

用于指示池是否对空闲对象表现出LIFO(后进先出)行为,还是作为先入先出(FIFO)队列。LIFO总是返回池中最近使用的对象,而FIFO则总是返回空闲对象池中最早的对象spring-doc.cadn.net.cn

验证查询基spring-doc.cadn.net.cn

LdapUtils.emptyPath()spring-doc.cadn.net.cn

用于验证搜索的基础DN。spring-doc.cadn.net.cn

验证查询Filterspring-doc.cadn.net.cn

对象类=*spring-doc.cadn.net.cn

用于验证查询的过滤器。spring-doc.cadn.net.cn

验证查询-搜索-控制-参考spring-doc.cadn.net.cn

;默认搜索控制设置如上所述。spring-doc.cadn.net.cn

一个搜索控制用于验证连接时的实例。仅在借用测试,回程测试闲置测试指定了spring-doc.cadn.net.cn

非瞬态异常spring-doc.cadn.net.cn

javax.naming.CommunicationExceptionspring-doc.cadn.net.cn

逗号分隔列表例外类。上述例外被视为非暂时的,适用于急于无效的。如果调用池时抛出上述任何例外(或其子类)是否会被抛出DirContext实例,该对象会自动失效,无需额外的testOnReturn作。spring-doc.cadn.net.cn

配置

配置池化需要添加<ldap:池化>嵌套在<ldap:context-source>元素如下:spring-doc.cadn.net.cn

<beans>
   ...
    <ldap:context-source
        password="secret" url="ldap://localhost:389" username="cn=Manager">
        <ldap:pooling />
    </ldap:context-source>
   ...
</beans>

在现实中,你可能会配置池选项并启用连接验证。前面的例子说明了这一大致的思路。spring-doc.cadn.net.cn

验证配置

以下示例测试每个DirContext在传递给客户端应用程序和测试之前DirContext在池中闲置的物体:spring-doc.cadn.net.cn

<beans>
   ...
    <ldap:context-source
        username="cn=Manager" password="secret" url="ldap://localhost:389" >
        <ldap:pooling
            test-on-borrow="true"
            test-while-idle="true" />
    </ldap:context-source>
   ...
</beans>

已知问题

本节描述了使用春季LDAP时有时会出现的问题。目前,它涵盖以下议题:spring-doc.cadn.net.cn

自定义认证

PoolingContextSource假设所有DirContext检索对象从ContextSource.getReadOnlyContext()拥有相同的环境,同样如此,DirContext检索对象从ContextSource.getReadWriteContext()环境也一样。这意味着包裹LdapContextSource配置为认证源PoolingContextSource但功能不如预期。池将使用第一个用户的凭证填充,除非需要新的连接,否则不会为指定的用户填写后续上下文请求认证源关于请求帖。spring-doc.cadn.net.cn