Skip to content

Commit f971bcf

Browse files
authored
To prevent NPE use pool name for metrics if JDBC URL is not set. (#754)
HikariCP pool can be configured using JDBC URL: ``` HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons"); ``` or using data source properties ``` Properties props = new Properties(); props.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource"); props.setProperty("dataSource.serverName", "localhost"); ... HikariConfig config = new HikariConfig(props); HikariDataSource ds = new HikariDataSource(config) ```
1 parent 49d1946 commit f971bcf

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Release Notes.
77

88
* Add the virtual thread executor plugin
99
* Fix Conflicts apm-jdk-threadpool-plugin conflicts with apm-jdk-forkjoinpool-plugin
10+
* Fix NPE in hikaricp-plugin if JDBC URL is not set
1011

1112
All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/236?closed=1)
1213

apm-sniffer/apm-sdk-plugin/hikaricp-3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hikaricp/PoolingSealInterceptor.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,13 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr
4949
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable {
5050

5151
HikariDataSource hikariDataSource = (HikariDataSource) objInst;
52-
ConnectionInfo connectionInfo = URLParser.parser(hikariDataSource.getJdbcUrl());
53-
String tagValue = connectionInfo.getDatabaseName() + "_" + connectionInfo.getDatabasePeer();
52+
String tagValue;
53+
if (hikariDataSource.getJdbcUrl() != null) {
54+
ConnectionInfo connectionInfo = URLParser.parser(hikariDataSource.getJdbcUrl());
55+
tagValue = connectionInfo.getDatabaseName() + "_" + connectionInfo.getDatabasePeer();
56+
} else {
57+
tagValue = hikariDataSource.getPoolName();
58+
}
5459
final Map<String, Function<HikariPoolMXBean, Supplier<Double>>> poolMetricMap = getPoolMetrics();
5560
final Map<String, Function<HikariConfigMXBean, Supplier<Double>>> metricConfigMap = getConfigMetrics();
5661
poolMetricMap.forEach((key, value) -> MeterFactory.gauge(METER_NAME, value.apply(hikariDataSource.getHikariPoolMXBean()))

0 commit comments

Comments
 (0)