Skip to content

ClassNotFoundException for DbClientMetrics #13667

@wimdeblauwe-volvo

Description

@wimdeblauwe-volvo

Describe the bug

I want to add opentelemetry-spring-boot-starter to my Spring Boot 3.4.4 application. I have added the dependency management section:

<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>io.opentelemetry.instrumentation</groupId>
				<artifactId>opentelemetry-instrumentation-bom</artifactId>
				<version>2.14.0</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

And the dependency:

		<dependency>
			<groupId>io.opentelemetry.instrumentation</groupId>
			<artifactId>opentelemetry-spring-boot-starter</artifactId>
		</dependency>

When I try to start my application, I get a ClassNotFoundException.

Relevant part of the stacktrace:

Caused by: java.lang.NoClassDefFoundError: io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientMetrics
	at io.opentelemetry.instrumentation.jdbc.internal.JdbcInstrumenterFactory.createStatementInstrumenter(JdbcInstrumenterFactory.java:56)
	at io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetryBuilder.build(JdbcTelemetryBuilder.java:50)
	at io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc.DataSourcePostProcessor.postProcessAfterInitialization(DataSourcePostProcessor.java:58)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:439)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
	... 34 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	... 40 common frames omitted

As a workaround, I can add this dependency:

		<dependency>
			<groupId>io.opentelemetry.instrumentation</groupId>
			<artifactId>opentelemetry-instrumentation-api-incubator</artifactId>
			<version>2.14.0-alpha</version>
		</dependency>

After that, things work.

Steps to reproduce

See description.

Expected behavior

I would expect the extra dependency to not be needed.

Actual behavior

The extra dependency is needed

Javaagent or library instrumentation version

2.14.0

Environment

JDK: 21
OS: macOS

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds triageNew issue that requires triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions