HikariCP 1.4.0 MBean InstanceNotFoundException

Я использую следующую конфигурацию для своего пула соединений с базой данных. Используя 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.

Любые предложения, что я могу попробовать дальше?


person stevencpt    schedule 20.06.2014    source источник


Ответы (2)


Две вещи. Всего два дня назад была обнаружена ошибка в HikariCP 1.4.0, связанная с игнорированием пользовательских имен пулов (и заменено автоматически сгенерированным именем). Эта ошибка исправлена, но вам нужно клонировать репозиторий и собрать его самостоятельно, так как он не появится до следующего релиза.

Во-вторых, вам нужно установить registerMbeans в true. Программно это будет setRegisterMbeans(true). Если вы запустите существующую версию 1.4.0, ваше пользовательское имя будет проигнорировано, но пул действительно будет зарегистрирован как MBean.

person brettw    schedule 21.06.2014
comment
Некоторым может быть очевидно, что setRegisterMBeans(true) следует вызывать для config, а не для HikariDataSource ds (потому что это не будет иметь никакого эффекта). - person Jeremy Chone; 16.04.2015
comment
Это не совсем так. Если вы используете объект HikariConfig, он должен быть установлен для этого объекта. Если вы создаете HikariDataSource напрямую, без HikariConfig, вы можете вызвать setRegisterMBeans(true) для HikariDataSource. Если не используется HikariConfig, будет учитываться конфигурация, заданная в HikariDataSource до первого вызова getConnection(). - person brettw; 17.04.2015
comment
@brettw неправильно, я только что попытался установить его в DataSource, и он не работает, но он работает при настройке в конфигурации. - person Alpha2k; 06.04.2018

Проблема с конфигурацией Hikari, вам нужно проверить банку агента.

person John William Oliver    schedule 20.06.2014