From c8dfe9cc65bb8e08a324bd15089a898aca4582dc Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 22 Jul 2026 13:47:46 +0000 Subject: [PATCH 1/2] feat: add Spring ConfigProvider example Signed-off-by: Gregor Zeitlinger --- .../build.gradle.kts | 2 +- .../fileconfig/ReadInstrumentationConfig.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java diff --git a/spring-declarative-configuration/build.gradle.kts b/spring-declarative-configuration/build.gradle.kts index 771c75dc82..0e7cdbcb56 100644 --- a/spring-declarative-configuration/build.gradle.kts +++ b/spring-declarative-configuration/build.gradle.kts @@ -17,7 +17,7 @@ java { dependencies { implementation(platform(SpringBootPlugin.BOM_COORDINATES)) - implementation(platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.29.0")) + implementation(platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.30.0")) implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-web") implementation("io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter") diff --git a/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java b/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java new file mode 100644 index 0000000000..69392d895a --- /dev/null +++ b/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.examples.fileconfig; + +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import org.springframework.stereotype.Component; + +/** Example of reading instrumentation configuration from application code. */ +@Component +public class ReadInstrumentationConfig { + + private final ConfigProvider configProvider; + + public ReadInstrumentationConfig(ConfigProvider configProvider) { + this.configProvider = configProvider; + } + + public boolean isDbQuerySanitizationEnabled() { + DeclarativeConfigProperties dbConfig = + configProvider + .getInstrumentationConfig() + .getStructured("java") + .getStructured("common") + .getStructured("db") + .getStructured("query_sanitization"); + return dbConfig.getBoolean("enabled", true); + } +} From af39d57ae02c4c1ae83ffb220eab14437441729c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 22 Jul 2026 14:03:53 +0000 Subject: [PATCH 2/2] docs: explain Spring ConfigProvider example Signed-off-by: Gregor Zeitlinger --- spring-declarative-configuration/README.md | 14 +++++++++++++- .../fileconfig/ReadInstrumentationConfig.java | 8 ++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/spring-declarative-configuration/README.md b/spring-declarative-configuration/README.md index 4fa2445ee0..d6cc0a0e58 100644 --- a/spring-declarative-configuration/README.md +++ b/spring-declarative-configuration/README.md @@ -30,7 +30,7 @@ This Spring Boot application includes two endpoints: ### Prerequisites - Java 17 or higher -- OpenTelemetry Spring Boot Starter **2.22.0+** on the classpath of this application (already +- OpenTelemetry Spring Boot Starter **2.30.0+** on the classpath of this application (already configured in this example’s [build file](./build.gradle.kts)) ### Step 1: Build the Application @@ -203,6 +203,18 @@ environment variable is not set. When copying configuration from non-Spring examples, always convert `:-` to `:` in placeholders. +## Read instrumentation configuration programmatically + +Starting with version 2.30.0, the OpenTelemetry Spring Boot Starter exposes a `ConfigProvider` +Spring bean. The [`ReadInstrumentationConfig`](./src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java) +component demonstrates how application code can inject this bean and read instrumentation +configuration. + +`ConfigProvider#getInstrumentationConfig()` returns the `instrumentation/development` configuration +tree. This example walks through `java.common.db.query_sanitization` and reads the `enabled` value, +defaulting to `true` when it is not configured. The same tree is used whether the setting comes from +an `otel.instrumentation.*` property or the equivalent declarative YAML configuration. + ## Declarative vs Programmatic Configuration Declarative configuration, as used in this example, allows you to express routing and sampling rules diff --git a/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java b/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java index 69392d895a..9b791a9fd9 100644 --- a/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java +++ b/spring-declarative-configuration/src/main/java/io/opentelemetry/examples/fileconfig/ReadInstrumentationConfig.java @@ -23,10 +23,10 @@ public boolean isDbQuerySanitizationEnabled() { DeclarativeConfigProperties dbConfig = configProvider .getInstrumentationConfig() - .getStructured("java") - .getStructured("common") - .getStructured("db") - .getStructured("query_sanitization"); + .get("java") + .get("common") + .get("db") + .get("query_sanitization"); return dbConfig.getBoolean("enabled", true); } }