【问题标题】:HikariCP 1.4.0 MBean InstanceNotFoundExceptionHikariCP 1.4.0 MBean InstanceNotFoundException
【发布时间】:2014-06-20 08:08:34
【问题描述】:

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

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 连接池相关的内容。

有什么我可以尝试的建议吗?

【问题讨论】:

    标签: java oracle hikaricp


    【解决方案1】:

    两件事。就在两天前,有一个针对 HikariCP 1.4.0 的 bug reported,关于用户定义的池名称被忽略(并替换为自动生成的名称)。此错误已修复,但您需要克隆存储库并自己构建它,因为它直到下一个版本才会出现。

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

    【讨论】:

    • 对某些人来说可能很明显的事情,setRegisterMBeans(true) 应该调用 config 而不是 HikariDataSource ds(因为它没有效果)。
    • 这并不完全正确。如果您使用 HikariConfig 对象,则必须在该对象上设置它。如果直接构造 HikariDataSource,不使用 HikariConfig,可以在 HikariDataSource 上调用setRegisterMBeans(true)。当使用 HikariConfig 时,在第一次调用 getConnection() 之前在 HikariDataSource 上设置的配置将被执行。
    • @brettw 错误,我只是尝试将其设置为 DataSource 并且它不起作用,但是在设置为配置时它可以。
    【解决方案2】:

    问题出在 Hikari config,您需要检查代理 jar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2016-06-20
      • 2017-12-29
      • 2010-09-28
      相关资源
      最近更新 更多