两个 SQL 服务器之间的 EAP 6 数据源容错配置负载平衡?

EAP 6 datasource fault tolerant configuration load balancing between two SQL servers?

环境:Jboss EAP 6.4 我的独立数据源配置如下-ha.xml

<datasource jndi-name="java:jboss/datasources/localPrimaryDS" pool-name="IntegrationDS1" enabled="true" use-java-context="true" statistics-enabled="true">
    <connection-url>jdbc:sqlserver://primarySqlServer;databaseName=HalfFat|jdbc:sqlserver://secondarySqlServer;databaseName=HalfFat</connection-url>
    <driver>mssql</driver>
    <url-delimiter>|</url-delimiter>
    <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <prefill>true</prefill>
        <use-strict-min>true</use-strict-min>
        <flush-strategy>IdleConnections</flush-strategy>
    </pool>
    <security>
        <user-name>user</user-name>
        <password>psswd</password>
    </security> 
    <validation>                    
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <background-validation-millis>60000</background-validation-millis>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"></exception-sorter>
    </validation>
</datasource>

观察: 当两个 SQL 服务器都存在时,应用程序专门从主 sql 服务器实例获得 JDBC 连接。当我 paused/disabled 主 sql 服务器时,在应用程序级别我观察到断开的连接是 destroyed/new 连接是从辅助 sql 服务器实例获得的。一切如预期。但是,如果我 resumed/re-enabled 主 sql 服务器实例,我观察到两个连接的混合。

问题: 这在某种程度上是一种不受欢迎的行为,因为我希望该应用程序继续使用来自辅助数据库的连接,直到它失败。我可以在数据源上配置一些东西来禁用这个 "load balancing" 行为吗?

谢谢

原来 <use-strict-min>true</use-strict-min> 是导致问题的原因。根据 redhat,当 use-strict-min 设置为 true 时,一旦达到最小池大小(使用中 + 可用连接),空闲连接扫描将不会标记为关闭任何进一步的连接。因此,我假设,仍然有一些来自主数据库的连接未标记为关闭,并且取消暂停 SQL 服务器将使那些未清理的连接再次可用。