Я настроил соединение с БД (HikariCP) на SprintBoot 2. У меня poolName определена в application.properties:
spring.datasource.hikari.poolName=HikariConnectionPool
Я хочу отслеживать количество простаивающих соединений с БД, поэтому я попытался создать поток, который отслеживает соединения с БД как:
public class HikariCPStatistics implements Runnable {
public static final Logger logger = LoggerFactory.getLogger(HikariCPStatistics.class);
private static HikariPoolMXBean poolProxy;
public HikariCPStatistics() {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
try {
ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (HikariConnectionPool)");
poolProxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);
} catch (MalformedObjectNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
logger.info("Starting Connection Pool status monitor");
while ( true ) {
logger.info("Hikari - Idle Connections: " + poolProxy.getIdleConnections());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
logger.error("Fail to run Connection Pool status monitor");
e.printStackTrace();
}
}
}
}
но я получаю исключение, что он не может найти экземпляр poolName HikariConnectionPool. Любое предложение о том, как я могу получить простаивающие соединения с БД, управляемые HikariCP?
Дальнейший анализ показал, что SpringBoot на самом деле не регистрирует bean-компонент Бассейн в JMX.
SpringBoot публикует только bean-компонент HikariDataSource в JMX, который имеет статическую конфигурацию источника данных Hikari.
Насколько я могу судить, Hikari поддерживает 2 разных шаблона конфигурации:
.
1) конфигурация через класс HikariConfig
2) прямая настройка HikariDataSource
SpringBoot использует второй вариант.
Я пробовал в прошлом 1-й вариант настройки HikariCP (без SpringBoot), который регистрировал Бассейн и PoolConfig Beans .... Bean Бассейн - это тот, который меня интересует, который использует соединения.
Кто-нибудь знает, как я могу настроить как вариант (1 - класс HikariConfig), установленный HikariDataSource в SpringBoot? Или как-нибудь springboot для создания Бассейн Bean?
Спасибо.




Вы можете получить много информации из пула соединений Hikari, внедрив HikariDataSource. даже в виде списка.
private final List<HikariDataSource> hikariConfigMXBeans;
infos like name = hikariDataSource.getPoolName();
idleTimeout = hikariDataSource.getIdleTimeout();
validationTimeout = hikariDataSource.getValidationTimeout();
connectionTimeout = hikariDataSource.getConnectionTimeout();
leakDetectionThreshold = hikariDataSource.getLeakDetectionThreshold();
maxLifetime = hikariDataSource.getMaxLifetime();
minimumIdle = hikariDataSource.getMinimumIdle();
maxPoolSize = hikariDataSource.getMaximumPoolSize();
Отсюда легко создать конечную точку привода для отображения этой информации.
Надеюсь, это та информация, которую вам нужно отслеживать
аааа хорошо, извините. неправильно понятый :)
Чтобы получить «незанятые соединения с БД, управляемые HikariCP, сначала получите HikariPool, используемый Весенний ботинок.
HikariPool hikariPool = (HikariPool) new DirectFieldAccessor(getDataSource()).getPropertyValue("pool");
А затем используйте метод HikariPool, чтобы получить текущий статус незанятых соединений:
hikariPool.getIdleConnections();
Для инициализации с помощью HikariConfig см. Инициализация Хикари
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
..
HikariDataSource ds = new HikariDataSource(config);
Вот как я отслеживаю пул соединений
HikariPool hikariPool = (HikariPool)
new DirectFieldAccessor(dataSource).getPropertyValue("pool");
//Getting pool connection info
logger.info(" hikariPool getActiveConnections : " + hikariPool.getActiveConnections());
logger.info(" hikariPool getTotalConnections : " + hikariPool.getTotalConnections());
logger.info(" hikariPool getIdleConnections : " + hikariPool.getIdleConnections());
logger.info(" hikariPool getThreadsAwaitingConnection : " + hikariPool.getThreadsAwaitingConnection());
//Getting maximum pool size - set from properties
Integer t= new HikariDataSourcePoolMetadata((HikariDataSource) dataSource).getMax();
logger.info(" hikariPool Maximum Pool Size : " + t.toString());
привет как определить пул? какова стоимость пула? что он делает .getPropertyValue ("пул");
Привет, Рик. Спасибо за Ваш ответ. Пример, который вы напишете, может получить статическую конфигурацию пула Hikari. Я ищу динамическую информацию ... в этом случае poolProxy.getIdleConnections, которые дают текущее количество доступных подключений в пуле в состоянии ожидания ... поэтому я могу контролировать во время выполнения приложение, если оно потребляет все подключение из пула.