Payara 5集群中JDBC连接池未跨实例共享的原因及文档咨询
问题解答
为什么JDBC连接池未在集群实例间共享?
Payara(包括其前身GlassFish)的JDBC连接池是按单个应用服务器实例独立创建和管理的,并非集群级别的共享资源。当你将连接池的目标设置为集群时,本质是把该连接池的配置同步复制到集群中的每一个实例,每个实例都会基于这个配置初始化属于自己的独立连接池。
具体到你的场景:
- 每个实例都会维护自己的连接池,你设置的「最大连接数5」是单个实例的连接上限
- 集群总连接数自然就是实例数乘以单实例最大连接数,也就是4×5=20,和你通过数据库工具观察到的结果完全一致
关于JTA数据源的补充说明
你在persistence.xml里配置的<jta-data-source>对应的JNDI资源,在集群环境下也是每个实例独立绑定的。应用在某个实例上运行时,会从当前实例的本地连接池获取连接,不会跨实例去共享其他节点的连接池资源。
相关机制说明
Payara的集群资源模型中,JDBC连接池属于实例级资源,而非集群共享资源。集群目标的作用是批量将配置同步到所有实例,而非让资源在实例间共享。由于每个集群实例都是独立的JVM进程,连接池是JVM进程内部的资源,无法直接跨进程实现连接共享。
内容的提问来源于stack exchange,提问作者matthjes
相关产品推荐
相关产品推荐

