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/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..9b791a9fd9 --- /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() + .get("java") + .get("common") + .get("db") + .get("query_sanitization"); + return dbConfig.getBoolean("enabled", true); + } +}