Upgrade to Hikaricp 3.2.0

Closes gh-13695
This commit is contained in:
Andy Wilkinson 2018-07-03 17:00:10 +01:00
parent 5e6220f040
commit fd624c20cf
3 changed files with 32 additions and 91 deletions

View File

@ -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());
}
}
}
}

View File

@ -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;
}
}

View File

@ -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>