# 组态

> 原文： [https://docs.oracle.com/javase/tutorial/jndi/ldap/config.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/config.html)

每个 Java 运行时配置和维护连接池。不在不同的运行时间之间共享连接。要使用连接池，不需要进行任何配置。仅当您要自定义池的完成方式时才需要进行配置，例如控制池的大小以及池的连接类型。

您可以在程序启动时使用许多系统属性来配置连接池。请注意，这些是系统属性，_ 而不是 _ 环境属性，它们会影响所有连接池请求。

下面是一个命令行示例，它将最大池大小设置为 20，将首选池大小设置为 10，将池空连接的空闲超时设置为分钟。

```
# java -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 \
       -Dcom.sun.jndi.ldap.connect.pool.prefsize=10 \
       -Dcom.sun.jndi.ldap.connect.pool.timeout=60000 \
    UsePool

```

下表列出了用于配置连接池的系统属性。在本节的其余部分中将更详细地描述它们。

| 系统属性名称 | 描述 | 默认 |
| --- | --- | --- |
| `com.sun.jndi.ldap.connect.pool.authentication` | 可以合并的空间分隔的身份验证类型的连接列表。有效类型为“none”，“simple”和“DIGEST-MD5”。 | `“不简单”` |
| `com.sun.jndi.ldap.connect.pool.debug` | 一个字符串，指示要生成的调试输出的级别。有效值为`“fine”`（跟踪连接创建和删除）和“all”（所有调试信息）。 |  |
| `com.sun.jndi.ldap.connect.pool.initsize` | 整数的字符串表示形式，表示最初为标识创建连接时要创建的每个连接标识的连接数。 | 1 |
| `com.sun.jndi.ldap.connect.pool.maxsize` | 整数的字符串表示形式，表示可以同时维护的每个连接标识的最大连接数。 | 没有最大尺寸 |
| `com.sun.jndi.ldap.connect.pool.prefsize` | 整数的字符串表示形式，表示应同时维护的每个连接标识的首选连接数。 | 没有首选尺寸 |
| `com.sun.jndi.ldap.connect.pool.protocol` | 可以合并的空间分隔协议类型的连接列表。有效类型是“plain”和“ssl”。 | `“普通”` |
| `com.sun.jndi.ldap.connect.pool.timeout` | 整数的字符串表示形式，表示空闲连接可以保留在池中而未关闭并从池中删除的毫秒数。 | 没有超时 |

## 汇集了什么

当您通过`"com.sun.jndi.ldap.connect.pool"`环境属性请求`Context`实例使用连接池时，可能会也可能不会合并使用的连接。默认规则是允许使用简单或不使用身份验证的普通（非 SSL）连接进行池化。您可以使用系统属性更改此默认值以包括 SSL 连接和 DIGEST-MD5 身份验证类型。要允许汇集普通和 SSL 连接，请将`“com.sun.jndi.ldap.connect.pool.protocol”`系统属性设置为字符串`“plain ssl”`。要允许共享匿名（无），简单和 DIGEST-MD5 身份验证类型的连接，请将 `com.sun.jndi.ldap.connect.pool.authentication` 系统属性设置为字符串`“没有简单的 DIGEST-MD5“`。

有一些环境属性会自动取消 `Context` 实例使用池化连接的资格。 `Context` 实例如果将`“java.naming.ldap.factory.socket”`属性设置为自定义套接字工厂类或其`“，则不能使用池连接 java.naming.security.sasl.callback“`属性设置为自定义回调处理程序类，或其`”com.sun.jndi.ldap.trace.ber“`属性设置为启用协议跟踪。

## 如何连接连接

当 `Context` 实例请求使用池连接时，LDAP 提供程序需要确定现有池连接是否可以满足请求。它通过为每个池化连接分配 _ 连接标识 _ 并检查传入请求是否具有与其池化连接之一相同的连接标识来实现此目的。

连接标识是创建可能经过身份验证的 LDAP 连接所需的参数集。其组成取决于请求的身份验证类型，如下表所示。

| 验证类型 | 连接标识内容 |
| --- | --- |
| 没有 | 

*   连接控制
*   主机名，`“java.naming.provider.url”`属性，引用或提供给初始上下文的 URL 中指定的端口号
*   以下属性的内容：

    ```
    java.naming.security.protocol
    java.naming.ldap.version

    ```

 |
| 简单 | 

*   所有列出的信息
*   以下属性的内容为：

    ```
    java.naming.security.principal
    java.naming.security.credentials

    ```

 |
| DIGEST-MD5 | 

*   列出的所有信息为简单
*   以下属性的内容：

    ```
    java.naming.security.sasl.authorizationId
    java.naming.security.sasl.realm
    javax.security.sasl.qop
    javax.security.sasl.strength
    javax.security.sasl.server.authentication
    javax.security.sasl.maxbuffer
    javax.security.sasl.policy.noplaintext
    javax.security.sasl.policy.noactive
    javax.security.sasl.policy.nodictionary
    javax.security.sasl.policy.noanonymous
    javax.security.sasl.policy.forward
    javax.security.sasl.policy.credentials

    ```

 |

## 泳池大小

LDAP 提供程序维护连接池;每个池保存具有相同连接标识的连接（使用中或空闲）。有三种尺寸会影响每个池的管理。这些大小是全局的，会影响所有池。

_ 初始池大小 _ 是 LDAP 服务提供程序在首次创建池时创建的每个连接标识的连接数（对应于应用程序首次请求该连接标识的池连接时）。在使用连接时，按需执行池中每个连接的身份验证。默认情况下，初始池大小为 1，可以使用系统属性`“com.sun.jndi.ldap.connect.pool.initsize”`进行更改。它通常在应用程序启动时使用，以通过与服务器的一定数量的连接来填充池。

_ 最大池大小 _ 是 LDAP 服务提供程序可以同时维护的每个连接标识的最大连接数。使用中和空闲连接都有助于此数字。当池大小达到该数量时，在删除池中的连接（即，物理连接关闭）之前，不会创建对应连接标识的新连接。当池大小达到最大值并且池中的所有连接都在使用时，应用程序对该池中连接的请求将被阻止，直到池中的连接变为空闲或被删除。最大池大小为 0 表示没有最大大小：池连接请求将使用现有的池空闲连接或新创建的池连接。

_ 首选池大小 _ 是 LDAP 服务提供商应维护的每个连接标识的首选连接数。使用中和空闲连接都有助于此数字。当应用程序请求使用池连接且池大小小于首选大小时，无论空闲连接是否可用，LDAP 提供程序都将创建并使用新的池连接。当应用程序完成池化连接（通过在共享连接的所有上下文上调用 `Context.close（）`）并且池大小大于首选大小时，LDAP 提供程序将关闭并删除从游泳池汇集连接。优选的池大小为 0 意味着没有首选大小：只有在没有空闲连接可用时，对池连接的请求才会导致新创建的连接。

请注意，最大池大小会覆盖初始池大小和首选池大小。例如，将首选池大小设置为大于最大池大小有效地将其设置为最大池大小。

## 空闲连接

当应用程序以池化连接完成时（通过在共享连接的所有上下文中调用 `Context.close（）`），底层池连接被标记为空闲，等待重用。默认情况下，空闲连接将无限期地保留在池中，直到它们被垃圾回收。如果已设置`“com.sun.jndi.ldap.connect.pool.timeout”`系统属性，则 LDAP 提供程序将自动关闭并删除已闲置超过指定时间段的池连接。