【发布时间】:2015-11-07 19:08:33
【问题描述】:
我的standalone.xml 中有以下配置:
<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 无法重新连接,我必须重新启动应用服务器。
但是,如果我使用org.postgresql.xa.PGXADataSource 驱动程序将datasource 更改为xa-datasource(保持示例中的配置),它可以工作。
问题是:我无法理解这一点。如果我错了,请纠正我,但xa-datasources 应该用于在多个数据库中同步提交,而这里不是这种情况。我实际上配置了多个数据库,但我不需要在它们之间同步事务。
“默认”datasource 似乎在调整连接池大小方面也存在问题。有时,与应用程序的负载无关,它会打开超过 100 个连接(即使限制为 100)并在几秒钟后关闭它们。这很难重现 - 因为它似乎是随机的,所以我不能确定切换到 xa-datasource 也可以解决这个问题。
现在:
- 为什么切换到
xa-datasource有效? - 这样做有什么影响?
- 为什么连接池会这么疯狂?
澄清一下,我的测试包括:
- 启动 postgres 和应用服务器;
- 向应用程序发出一些请求;
- 停止数据库;
- 向应用程序发出一些请求 - 并查看它们没有工作,因为它无法打开任何连接;
- 再次启动数据库;
- 向应用程序发出一些请求
在最后一步,xa-datasource 可以与 postgres 重新连接,一切正常。 datasource 不能,并且永远失败,加载无关紧要 - 我必须重新启动应用服务器。
【问题讨论】:
标签: java postgresql jboss7.x