HikariCP 1.4.0 MBean InstanceNotFoundException

时间:2014-06-20 08:08:35

标签: java oracle hikaricp

我对数据库连接池使用以下配置。 使用在Windows 7上运行的HikariCP 1.4.0,jdk1.6.0_45和Oracle Express 11g。

HikariConfig config = new HikariConfig();
config.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");
config.addDataSourceProperty("serverName", "localhost");
config.addDataSourceProperty("url", "jdbc:oracle:thin:@localhost:1521:XE");
config.addDataSourceProperty("user", "bob");
config.addDataSourceProperty("password", "bob1");
config.setPoolName("steve");

HikariDataSource ds = new HikariDataSource(config);

// do some inserts and reads here ... works great

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (steve)");

Integer idleConnections = (Integer) mBeanServer.getAttribute(poolName, "IdleConnections");

System.out.println("Number of Idle Connections : " + idleConnections);          

我得到了这个堆栈跟踪:

javax.management.InstanceNotFoundException: com.zaxxer.hikari:type=Pool (steve)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:639)

使用JConsole并附加到正在运行的进程。我看到以下MBean:JMImplemtation,com.oracle.jdbc,com.sun.management,java.lang,java.nio,java.util.logging。

我没有看到任何与Hikari连接池相关的内容。

我可以尝试下一步的建议吗?

2 个答案:

答案 0 :(得分:7)

两件事。两天前针对HikariCP 1.4.0有一个bug reported关于忽略用户定义的池名称(并用自动生成的名称替换)。此错误已修复,但您需要克隆存储库并自行构建,因为它将在下一个版本发布之前显示。

第二件事是,您需要将registerMbeans设置为true。以编程方式,这将是setRegisterMbeans(true)。如果运行现有1.4.0,则将忽略您的用户定义名称,但该池确实将注册为MBean。

答案 1 :(得分:0)

问题在于Hikari配置,您需要检查代理jar。