如何在EAP 7.1中通过MBean获取数据源的maxPoolSize
获取JBoss EAP 7.1数据源maxPoolSize的MBean路径
嗨,我之前迁移项目时刚好踩过这个坑!JBoss EAP 7.x(包括7.1)基于WildFly重构了整个子系统的MBean命名规则,所以JBoss 6那套路径完全失效了,给你两种实用的解决方法:
1. 直接定位正确的MBean路径
不管是普通数据源还是XA数据源,EAP 7.1里的MBean路径结构更清晰:
- 普通数据源:
jboss.as:subsystem=datasources,data-source=MyDataSource - XA数据源:
jboss.as:subsystem=datasources,xa-data-source=MyDataSource
找到这个MBean后,直接查看**maxPoolSize**属性就能拿到最大连接池大小。如果用JConsole/VisualVM这类工具连接服务器,你可以在jboss.as域下的subsystem=datasources节点里快速定位到你的数据源。
2. 用JBoss CLI验证(更稳妥)
如果你对路径或属性名存疑,用EAP自带的CLI工具确认最靠谱:
- 启动CLI并连接到服务器:
./jboss-cli.sh --connect - 读取XA数据源的池大小属性(CLI里的
max-pool-size对应MBean的maxPoolSize):
执行后会返回类似结果:/subsystem=datasources/xa-data-source=MyDataSource:read-attribute(name=max-pool-size)
这里的{ "outcome" => "success", "result" => 20 }result就是你要的maxPoolSize值,同时也能验证:CLI里用短横线分隔的属性名,在MBean中会转换为驼峰式的maxPoolSize。
代码获取示例(JMX方式)
如果需要在代码里通过JMX获取,参考示例如下:
import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.naming.Context; import javax.naming.InitialContext; public class DatasourcePoolSizeReader { public static void main(String[] args) throws Exception { Context ctx = new InitialContext(); MBeanServerConnection jmxConn = (MBeanServerConnection) ctx.lookup("jmx/rmi/RMIConnector"); ObjectName dsObjectName = new ObjectName("jboss.as:subsystem=datasources,xa-data-source=MyDataSource"); Integer maxPoolSize = (Integer) jmxConn.getAttribute(dsObjectName, "maxPoolSize"); System.out.println("数据源最大连接池大小:" + maxPoolSize); } }
内容的提问来源于stack exchange,提问作者RaQua
相关产品推荐
相关产品推荐

