6.2.2. 配置 JDBC 连接池


如果您已经为 JDBC 持久性配置了代理,代理将使用 JDBC 连接将消息和绑定数据存储在数据库表中。

如果 JDBC 连接失败,并且只要发生故障时没有活动的连接活动(如数据库读取或写入),代理将继续运行,并尝试重新建立数据库连接。为实现这一目标,AMQ Broker 使用 JDBC 连接池

通常,连接池 提供一组开放连接,可以与多个应用之间共享的指定数据库。对于代理,如果代理与数据库之间的连接失败,代理会尝试使用来自池的不同连接重新连接到数据库。池在代理接收新连接前测试它。

下例演示了如何配置 JDBC 连接池。

重要

如果您没有明确配置 JDBC 连接池,代理将使用带有默认配置的连接池。默认配置使用现有 JDBC 配置中的值。如需更多信息,请参阅 默认连接池配置

先决条件

流程

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. 在您之前为 JDBC 配置添加的 database-store 元素中,删除 jdbc-driver-class-name, jdbc-connection-url, jdbc-user, jdbc-password, 参数。在此过程稍后,您将用对应的 DBCP 配置参数替换它们。

    注意

    如果您没有显式删除前面的参数,则优先选择您在此流程中添加的对应的 DBCP 参数。

  3. database-store 元素内,添加 data-source-properties 元素。例如:

    <store>
        <database-store>
            <data-source-properties>
            </data-source-properties>
            <bindings-table-name>BINDINGS</bindings-table-name>
            <message-table-name>MESSAGES</message-table-name>
            <large-message-table-name>LARGE_MESSAGES</large-message-table-name>
            <page-store-table-name>PAGE_STORE</page-store-table-name>
            <node-manager-store-table-name>NODE_MANAGER_STORE</node-manager-store-table-name>
            <jdbc-network-timeout>10000</jdbc-network-timeout>
            <jdbc-lock-renew-period>2000</jdbc-lock-renew-period>
            <jdbc-lock-expiration>20000</jdbc-lock-expiration>
            <jdbc-journal-sync-period>5</jdbc-journal-sync-period>
        </database-store>
    </store>
  4. 在新的 data-source-properties 元素内,为连接池添加 DBCP 数据源属性。指定键值对。例如:

    <store>
        <database-store>
            <data-source-properties>
                <data-source-property key="driverClassName" value="com.mysql.jdbc.Driver" />
                <data-source-property key="url" value="jdbc:mysql://localhost:3306/artemis" />
                <data-source-property key="username" value="ENC(5493dd76567ee5ec269d1182397346f)"/>
                <data-source-property key="password" value="ENC(56a0db3b71043054269d1182397346f)"/>
                <data-source-property key="poolPreparedStatements" value="true" />
                <data-source-property key="maxTotal" value="-1" />
            </data-source-properties>
            <bindings-table-name>BINDINGS</bindings-table-name>
            <message-table-name>MESSAGES</message-table-name>
            <large-message-table-name>LARGE_MESSAGES</large-message-table-name>
            <page-store-table-name>PAGE_STORE</page-store-table-name>
            <node-manager-store-table-name>NODE_MANAGER_STORE</node-manager-store-table-name>
            <jdbc-network-timeout>10000</jdbc-network-timeout>
            <jdbc-lock-renew-period>2000</jdbc-lock-renew-period>
            <jdbc-lock-expiration>20000</jdbc-lock-expiration>
            <jdbc-journal-sync-period>5</jdbc-journal-sync-period>
        </database-store>
    </store>
    driverClassName
    JDBC 数据库驱动程序的完全限定类名称。
    url
    数据库服务器的完整 JDBC 连接 URL。
    username
    您的数据库服务器的加密用户名。您还可以将此值指定为未加密的纯文本。有关加密配置文件中使用的用户名和密码的详情请参考 第 5.9 节 “加密配置文件中的密码”
    password
    加密您的数据库服务器密码。您还可以将此值指定为未加密的纯文本。有关加密配置文件中使用的用户名和密码的详情请参考 第 5.9 节 “加密配置文件中的密码”
    poolPreparedStatements
    当此参数的值设为 true 时,池可以具有无限数量的缓存就绪语句。这可降低初始化成本。
    maxTotal
    池中连接的最大数量。当此参数的值设为 -1 时,没有限制。

如果您没有明确配置 JDBC 连接池,代理将使用带有默认配置的连接池。默认配置在表中进行了描述。

表 6.1. 默认连接池配置
DBCP 配置参数默认值

driverClassName

现有 jdbc-driver-class-name 参数的值

url

现有 jdbc-connection-url 参数的值

username

现有 jdbc-user 参数的值

password

现有 jdbc-password 参数的值

poolPreparedStatements

true

maxTotal

-1

注意

重新连接 仅在 没有客户端主动向代理发送信息时才有效。如果在重新连接过程中尝试写入数据库表,代理会失败并关闭。

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.