环境: Jboss EAP 6.4我的standalone-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 server都存在时,应用程序以独占方式从主sql server实例获得JDBC连接。当我暂停/禁用主sql服务器时,在应用程序级别上,我观察到断开的连接被破坏/从辅助sql服务器实例获得新连接。一切都和预期的一样。但是,如果我恢复/重新启用主sql server实例,我观察到两个连接的混合。
问:这在某种程度上是一种不受欢迎的行为,因为我希望应用程序继续使用来自辅助数据库的连接,直到它失败。有没有什么我可以在数据源上配置来禁用这种“负载平衡”行为?
谢谢
发布于 2019-02-07 01:39:44
事实证明,<use-strict-min>true</use-strict-min>是导致问题的原因。根据redhat的说法,当use-strict-min设置为true时,一旦达到最小池大小(使用中+可用连接数),空闲连接扫描将不会标记为关闭任何进一步的连接。因此,我假设仍有一些来自主数据库的连接未标记为关闭,取消暂停SQL服务器将使这些未清理的连接再次可用。
https://stackoverflow.com/questions/54556540
复制相似问题