Skip to content

Commit 9bc1733

Browse files
committed
Fix Spring Boot 2 Java 8 compatibility
1 parent 62e4de9 commit 9bc1733

File tree

8 files changed

+56
-51
lines changed

8 files changed

+56
-51
lines changed

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/build.gradle.kts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,4 @@ tasks {
5757
dependsOn(testPS)
5858
dependsOn(testSerial)
5959
}
60-
61-
tasks {
62-
compileJava {
63-
// We compile this module for java 8 because it is used as a dependency in spring-boot-autoconfigure.
64-
// If this module is compiled for java 17 then gradle can figure out based on the metadata that
65-
// spring-boot-autoconfigure has a dependency that requires 17 and fails the build when it is used
66-
// in a project that targets an earlier java version.
67-
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/13384
68-
sourceCompatibility = "1.8"
69-
targetCompatibility = "1.8"
70-
options.release.set(null as Int?)
71-
}
72-
}
7360
}

instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ dependencies {
5454
compileOnly("ch.qos.logback:logback-classic:1.0.0")
5555
implementation(project(":instrumentation:jdbc:library"))
5656
implementation(project(":instrumentation:runtime-telemetry:runtime-telemetry-java8:library"))
57-
implementation(project(":instrumentation:runtime-telemetry:runtime-telemetry-java17:library"))
5857

5958
library("org.springframework.kafka:spring-kafka:2.9.0")
6059
library("org.springframework.boot:spring-boot-starter-actuator:$springBootVersion")
@@ -99,6 +98,7 @@ dependencies {
9998

10099
// needed for the Spring Boot 3 support
101100
implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library"))
101+
compileOnly(project(":instrumentation:runtime-telemetry:runtime-telemetry-java17:library"))
102102

103103
// give access to common classes, e.g. InstrumentationConfigUtil
104104
add("javaSpring3CompileOnly", files(sourceSets.main.get().output.classesDirs))

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsProvider.java

Lines changed: 0 additions & 34 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;
7+
8+
import io.opentelemetry.api.OpenTelemetry;
9+
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
10+
import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics;
11+
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RuntimeMetricsConfigUtil;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
15+
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
16+
import org.springframework.boot.system.JavaVersion;
17+
import org.springframework.context.annotation.Bean;
18+
import org.springframework.context.annotation.Configuration;
19+
20+
/**
21+
* Configures runtime metrics collection for Java 17+.
22+
*
23+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
24+
* at any time.
25+
*/
26+
@Configuration
27+
@ConditionalOnJava(JavaVersion.SEVENTEEN)
28+
@ConditionalOnClass(RuntimeMetrics.class)
29+
public class Java17RuntimeMetricsAutoConfiguration {
30+
private static final Logger logger =
31+
LoggerFactory.getLogger(Java17RuntimeMetricsAutoConfiguration.class);
32+
33+
static final String JAVA_17_RUNTIME_METRICS_PROVIDER_BEAN_NAME = "java17RuntimeMetricsProvider";
34+
35+
@Bean(name = JAVA_17_RUNTIME_METRICS_PROVIDER_BEAN_NAME)
36+
RuntimeMetricsProvider java17RuntimeMetricsProvider() {
37+
return new RuntimeMetricsProvider() {
38+
@Override
39+
public int minJavaVersion() {
40+
return 17;
41+
}
42+
43+
@Override
44+
public AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationConfig config) {
45+
logger.debug("Use runtime metrics instrumentation for Java 17+");
46+
return RuntimeMetricsConfigUtil.configure(RuntimeMetrics.builder(openTelemetry), config);
47+
}
48+
};
49+
}
50+
}

instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsBeanRegistrationExcludeFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public boolean isExcludedFromAotProcessing(RegisteredBean registeredBean) {
2020
// The JFR-based runtime metric code is excluded from the Spring AOT processing step.
2121
// That way, this code is not included in a Spring native image application.
2222

23-
return Java17RuntimeMetricsProvider.class.getName().equals(registeredBean.getBeanName());
23+
return Java17RuntimeMetricsAutoConfiguration.JAVA_17_RUNTIME_METRICS_PROVIDER_BEAN_NAME.equals(
24+
registeredBean.getBeanName());
2425
}
2526
}

instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.w
1313
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.scheduling.SpringSchedulingInstrumentationAutoConfiguration,\
1414
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.RuntimeMetricsAutoConfiguration,\
1515
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java8RuntimeMetricsProvider,\
16-
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsProvider
16+
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsAutoConfiguration
1717

1818
org.springframework.context.ApplicationListener=\
1919
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.logging.LogbackAppenderApplicationListener

instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.w
1313
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.scheduling.SpringSchedulingInstrumentationAutoConfiguration
1414
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.RuntimeMetricsAutoConfiguration
1515
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java8RuntimeMetricsProvider
16-
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsProvider
16+
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsAutoConfiguration

smoke-tests-otel-starter/spring-boot-3/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dependencies {
2121
implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES))
2222

2323
implementation(project(":smoke-tests-otel-starter:spring-boot-common"))
24+
implementation(project(":instrumentation:runtime-telemetry:runtime-telemetry-java17:library"))
2425
testImplementation("org.testcontainers:junit-jupiter")
2526
testImplementation("org.testcontainers:kafka")
2627
testImplementation("org.testcontainers:mongodb")

0 commit comments

Comments
 (0)