diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/jdbc/TraceListenerStrategy.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/jdbc/TraceListenerStrategy.java index 605b510b5..a53dd82e8 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/jdbc/TraceListenerStrategy.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/jdbc/TraceListenerStrategy.java @@ -20,6 +20,7 @@ import java.net.URI; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -73,6 +74,10 @@ class TraceListenerStrategy { // string. private static final Pattern URL_SERVICE_NAME_FINDER = Pattern.compile("sleuthServiceName=(.*?)(?:&|$)"); + private static final String DEFAULT_SPAN_NAME = "query"; + + private static final List KNOWN_SPAN_NAMES = Arrays.asList("select", "insert", "update", "delete"); + private final Map openConnections = new ConcurrentHashMap<>(); private final ThreadLocal currentConnection = new ThreadLocal<>(); @@ -429,7 +434,15 @@ class TraceListenerStrategy { } private String spanName(String sql) { - return sql.substring(0, sql.indexOf(' ')).toLowerCase(Locale.ROOT); + String lowercaseSql = sql.toLowerCase(Locale.ROOT); + String spanName = DEFAULT_SPAN_NAME; + for (String spanNameCandidate : KNOWN_SPAN_NAMES) { + if (lowercaseSql.startsWith(spanNameCandidate)) { + spanName = spanNameCandidate; + break; + } + } + return spanName; } /**