我有以下配置我standalone.xml
:Jboss的AS7連接池將無法重新連接
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
<datasource jta="true" jndi-name="java:/jdbc/myds" pool-name="CADS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:postgresql://db.host/name</connection-url>
<driver>postgresql</driver>
<new-connection-sql>select 1</new-connection-sql>
<pool>
<min-pool-size>20</min-pool-size>
<max-pool-size>100</max-pool-size>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
<security>
<user-name>user</user-name>
<password>pwd</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
</timeout>
<statement>
<track-statements>true</track-statements>
</statement>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.Driver</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
如果由於某種原因,數據庫停止響應爲第二時,JBoss無法重新連接,我要重新啓動應用服務器。
但是,如果我改變datasource
到xa-datasource
使用org.postgresql.xa.PGXADataSource
驅動程序(保持的配置,因爲它是在本例中),它的工作原理。
事情是:我無法理解這一點。糾正我,如果我錯了,但xa-datasources
應該被用來在多個數據庫同步提交,這不是這裏的情況。我實際上配置了多個數據庫,但我不需要同步它們之間的事務。
「默認」datasource
在連接池大小方面似乎也有問題。有時,應用程序的負載無關緊要,它會打開超過100個連接(即使限制爲100),並在幾秒鐘後關閉它們。這很難重現 - 因爲它看起來是隨機的,所以,我無法確定切換到xa-datasource
也解決了這個問題。
現在:
- 爲什麼切換到
xa-datasource
作品? - 這樣做的含義是什麼?
- 爲什麼連接池會像這樣瘋狂?
只是爲了澄清,我的試驗包括:
- 啓動的Postgres和應用服務器;
- 對應用程序做一些請求;
- 停止數據庫;
- 對應用程序執行一些請求 - 並查看它們無法工作,因爲它無法打開任何連接;
- 重新啓動數據庫;
- 做一些應用程序的請求
在最後一步,xa-datasource
可以用Postgres的重新連接並一切正常。 datasource
不能,並永遠失敗,加載並不重要 - 我必須重新啓動應用程序服務器。
這似乎解決了問題......非常感謝! – caarlos0
這裏的「魔術」似乎是use-fast-fail = true,我想知道爲什麼我需要所有其他人......你能解釋一下你的配置的基本原理嗎? – caarlos0
我添加了關於不同參數的評論。 – teacurran