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 javax.sql.DataSource;
|
||||||
|
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory;
|
||||||
import io.micrometer.core.instrument.MeterRegistry;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
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.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
|
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.context.annotation.Configuration;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@ -101,10 +102,34 @@ public class DataSourcePoolMetricsAutoConfiguration {
|
|||||||
@ConditionalOnClass(HikariDataSource.class)
|
@ConditionalOnClass(HikariDataSource.class)
|
||||||
static class HikariDataSourceMetricsConfiguration {
|
static class HikariDataSourceMetricsConfiguration {
|
||||||
|
|
||||||
@Bean
|
private static final Log logger = LogFactory
|
||||||
public static HikariDataSourceMetricsPostProcessor hikariDataSourceMetricsPostProcessor(
|
.getLog(HikariDataSourceMetricsConfiguration.class);
|
||||||
ApplicationContext applicationContext) {
|
|
||||||
return new HikariDataSourceMetricsPostProcessor(applicationContext);
|
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>
|
<hazelcast-hibernate5.version>1.2.3</hazelcast-hibernate5.version>
|
||||||
<hibernate.version>5.3.1.Final</hibernate.version>
|
<hibernate.version>5.3.1.Final</hibernate.version>
|
||||||
<hibernate-validator.version>6.0.10.Final</hibernate-validator.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>
|
<hsqldb.version>2.4.1</hsqldb.version>
|
||||||
<htmlunit.version>2.31</htmlunit.version>
|
<htmlunit.version>2.31</htmlunit.version>
|
||||||
<httpasyncclient.version>4.1.3</httpasyncclient.version>
|
<httpasyncclient.version>4.1.3</httpasyncclient.version>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user