JBoss 偶尔无法连接到数据库
JBoss occasionally couldn't connect to database
JBoss as7.1.1
MS SQL Server 2012
我的 JBoss 中设置了以下数据源,有时它在连接到数据库时出现问题,它一直在尝试但无法连接。
<datasource jta="false" jndi-name="java:jboss/WebDataSource" pool-name="WebDataSource" enabled="true" use-ccm="false">
<connection-url>jdbc:sqlserver://proddbserver:1433;DATABASENAME=proddb;sendStringParametersAsUnicode=false;</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver>sqljdbc4.jar</driver>
<new-connection-sql>SELECT 1</new-connection-sql>
<pool>
<min-pool-size>100</min-pool-size>
<max-pool-size>300</max-pool-size>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>user</user-name>
<password>pwd</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>true</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>300000</background-validation-millis>
<use-fast-fail>true</use-fast-fail>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
我在本地 JBoss 尝试了相同的设置指向测试数据库,当没有数据库连接时,如果我尝试登录门户,门户 returns 返回错误消息立即,因为它无法与数据库对话,而在生产中,当我尝试登录门户时,它会继续尝试。
在我的本地环境下,拔掉网线,尝试访问有数据库连接的页面,失败
连接,然后插回网线,进入页面,可以成功取回数据。也试过停止数据库,重新启动它,仍然可以从门户成功访问。
重新启动生产 JBoss 修复了这个问题。可能是什么问题呢?在不重启的情况下是否有任何其他可用的修复程序?我检查了许多与该主题相关的 SO 帖子,并注意到几乎没有什么区别,例如使用 'valid-connection-checker' 而不是 'check-valid-connection-sql' 和 'validate-on-match' 在 'background-validation' 为真时不需要。
另一个 JBoss 在不同的 windows 服务器中具有相同的代码库和数据源设置,负载平衡,工作得很好。
连接到数据库服务器时出现问题的服务器位于不同的网络中,此连接问题是由
网络带宽被其他进程阻塞。此连接问题在特定时间发生,这给了
一些提示问题出在哪里。消耗大部分带宽的程序在下班后被推迟到 运行,我相信这是
解决了问题。
同时,在进行上述修复之前,我还将 'datasource' 设置从 5 分钟更新为 1 分钟,
<background-validation-millis>60000</background-validation-millis>
不确定这是否有帮助。但我注意到,在此更改之前,JBoss 数据库池很快就被填满,JBoss 崩溃了,而在此数据源设置更新之后并没有发生。
任何一个修复程序都可以解决问题。
JBoss as7.1.1
MS SQL Server 2012
我的 JBoss 中设置了以下数据源,有时它在连接到数据库时出现问题,它一直在尝试但无法连接。
<datasource jta="false" jndi-name="java:jboss/WebDataSource" pool-name="WebDataSource" enabled="true" use-ccm="false">
<connection-url>jdbc:sqlserver://proddbserver:1433;DATABASENAME=proddb;sendStringParametersAsUnicode=false;</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver>sqljdbc4.jar</driver>
<new-connection-sql>SELECT 1</new-connection-sql>
<pool>
<min-pool-size>100</min-pool-size>
<max-pool-size>300</max-pool-size>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>user</user-name>
<password>pwd</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>true</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>300000</background-validation-millis>
<use-fast-fail>true</use-fast-fail>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
我在本地 JBoss 尝试了相同的设置指向测试数据库,当没有数据库连接时,如果我尝试登录门户,门户 returns 返回错误消息立即,因为它无法与数据库对话,而在生产中,当我尝试登录门户时,它会继续尝试。
在我的本地环境下,拔掉网线,尝试访问有数据库连接的页面,失败 连接,然后插回网线,进入页面,可以成功取回数据。也试过停止数据库,重新启动它,仍然可以从门户成功访问。
重新启动生产 JBoss 修复了这个问题。可能是什么问题呢?在不重启的情况下是否有任何其他可用的修复程序?我检查了许多与该主题相关的 SO 帖子,并注意到几乎没有什么区别,例如使用 'valid-connection-checker' 而不是 'check-valid-connection-sql' 和 'validate-on-match' 在 'background-validation' 为真时不需要。
另一个 JBoss 在不同的 windows 服务器中具有相同的代码库和数据源设置,负载平衡,工作得很好。
连接到数据库服务器时出现问题的服务器位于不同的网络中,此连接问题是由 网络带宽被其他进程阻塞。此连接问题在特定时间发生,这给了 一些提示问题出在哪里。消耗大部分带宽的程序在下班后被推迟到 运行,我相信这是 解决了问题。
同时,在进行上述修复之前,我还将 'datasource' 设置从 5 分钟更新为 1 分钟,
<background-validation-millis>60000</background-validation-millis>
不确定这是否有帮助。但我注意到,在此更改之前,JBoss 数据库池很快就被填满,JBoss 崩溃了,而在此数据源设置更新之后并没有发生。
任何一个修复程序都可以解决问题。