Upgrade to Hikaricp 3.2.0
Closes gh-13695
This commit is contained in:
parent
5e6220f040
commit
fd624c20cf
@ -23,7 +23,10 @@ import java.util.Map;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory;
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
||||
@ -35,8 +38,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@ -101,10 +102,34 @@ public class DataSourcePoolMetricsAutoConfiguration {
|
||||
@ConditionalOnClass(HikariDataSource.class)
|
||||
static class HikariDataSourceMetricsConfiguration {
|
||||
|
||||
@Bean
|
||||
public static HikariDataSourceMetricsPostProcessor hikariDataSourceMetricsPostProcessor(
|
||||
ApplicationContext applicationContext) {
|
||||
return new HikariDataSourceMetricsPostProcessor(applicationContext);
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(HikariDataSourceMetricsConfiguration.class);
|
||||
|
||||
private final MeterRegistry registry;
|
||||
|
||||
HikariDataSourceMetricsConfiguration(MeterRegistry registry) {
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public void bindMetricsRegistryToHikariDataSources(
|
||||
Collection<DataSource> dataSources) {
|
||||
dataSources.stream().filter(HikariDataSource.class::isInstance)
|
||||
.map(HikariDataSource.class::cast)
|
||||
.forEach(this::bindMetricsRegistryToHikariDataSource);
|
||||
}
|
||||
|
||||
private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari) {
|
||||
if (hikari.getMetricRegistry() == null
|
||||
&& hikari.getMetricsTrackerFactory() == null) {
|
||||
try {
|
||||
hikari.setMetricsTrackerFactory(
|
||||
new MicrometerMetricsTrackerFactory(this.registry));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.warn("Failed to bind Hikari metrics: " + ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,84 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics.jdbc;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory;
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.Ordered;
|
||||
|
||||
/**
|
||||
* {@link BeanPostProcessor} that configures Hikari metrics. Such arrangement is necessary
|
||||
* because a {@link HikariDataSource} instance cannot be modified once its configuration
|
||||
* has completed.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class HikariDataSourceMetricsPostProcessor implements BeanPostProcessor, Ordered {
|
||||
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(HikariDataSourceMetricsPostProcessor.class);
|
||||
|
||||
private final ApplicationContext context;
|
||||
|
||||
private volatile MeterRegistry meterRegistry;
|
||||
|
||||
HikariDataSourceMetricsPostProcessor(ApplicationContext context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) {
|
||||
if (bean instanceof HikariDataSource) {
|
||||
bindMetricsRegistryToHikariDataSource(getMeterRegistry(),
|
||||
(HikariDataSource) bean);
|
||||
}
|
||||
return bean;
|
||||
}
|
||||
|
||||
private void bindMetricsRegistryToHikariDataSource(MeterRegistry registry,
|
||||
HikariDataSource dataSource) {
|
||||
if (dataSource.getMetricRegistry() == null
|
||||
&& dataSource.getMetricsTrackerFactory() == null) {
|
||||
try {
|
||||
dataSource.setMetricsTrackerFactory(
|
||||
new MicrometerMetricsTrackerFactory(registry));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.warn("Failed to bind Hikari metrics: " + ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MeterRegistry getMeterRegistry() {
|
||||
if (this.meterRegistry == null) {
|
||||
this.meterRegistry = this.context.getBean(MeterRegistry.class);
|
||||
}
|
||||
return this.meterRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return Ordered.HIGHEST_PRECEDENCE;
|
||||
}
|
||||
|
||||
}
|
@ -70,7 +70,7 @@
|
||||
<hazelcast-hibernate5.version>1.2.3</hazelcast-hibernate5.version>
|
||||
<hibernate.version>5.3.1.Final</hibernate.version>
|
||||
<hibernate-validator.version>6.0.10.Final</hibernate-validator.version>
|
||||
<hikaricp.version>2.7.9</hikaricp.version>
|
||||
<hikaricp.version>3.2.0</hikaricp.version>
|
||||
<hsqldb.version>2.4.1</hsqldb.version>
|
||||
<htmlunit.version>2.31</htmlunit.version>
|
||||
<httpasyncclient.version>4.1.3</httpasyncclient.version>
|
||||
|
Loading…
x
Reference in New Issue
Block a user