From 93b330a5c69b03c65ced587b9a47aafb87c22103 Mon Sep 17 00:00:00 2001 From: Sandy Chen Date: Wed, 7 Jan 2026 00:00:18 +0900 Subject: [PATCH 01/17] feat(opentelemetry): add opentelemetry support --- build.gradle.kts | 15 + .../MigrateDatadogToOpenTelemetry.java | 83 +++ .../MigrateOpenTracingToOpenTelemetry.java | 80 +++ ...grateSleuthAnnotationsToOpenTelemetry.java | 78 +++ .../MigrateSleuthToMicrometerTracing.java | 93 +++ .../spring/opentelemetry/package-info.java | 34 + .../META-INF/rewrite/opentelemetry.yml | 611 ++++++++++++++++++ .../resources/META-INF/rewrite/recipes.csv | 22 + .../MigrateDatadogToOpenTelemetryTest.java | 266 ++++++++ ...MigrateOpenTracingToOpenTelemetryTest.java | 205 ++++++ ...eSleuthAnnotationsToOpenTelemetryTest.java | 189 ++++++ .../MigrateSleuthToMicrometerTracingTest.java | 186 ++++++ 12 files changed, 1862 insertions(+) create mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java create mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java create mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java create mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java create mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java create mode 100644 src/main/resources/META-INF/rewrite/opentelemetry.yml create mode 100644 src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java create mode 100644 src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java create mode 100644 src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java create mode 100644 src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 5da4fc79f..76b27ca56 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -78,6 +78,13 @@ recipeDependencies { parserClasspath("org.springframework.cloud:spring-cloud-sleuth-api:3.1.+") + // OpenTelemetry dependencies + parserClasspath("io.opentelemetry:opentelemetry-api:1.+") + parserClasspath("io.opentelemetry:opentelemetry-context:1.+") + parserClasspath("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.+") + parserClasspath("io.micrometer:micrometer-tracing:1.+") + parserClasspath("io.opentracing:opentracing-api:0.33.0") + parserClasspath("org.springdoc:springdoc-openapi-starter-common:2.+") parserClasspath("com.nimbusds:nimbus-jose-jwt:9.13") @@ -177,6 +184,14 @@ recipeDependencies { testParserClasspath("org.springframework:spring-web:6.0.+") testParserClasspath("org.springframework:spring-web:6.1.8") testParserClasspath("org.springframework:spring-webflux:6.1.16") + + // OpenTelemetry test dependencies + testParserClasspath("io.opentelemetry:opentelemetry-api:1.+") + testParserClasspath("io.opentelemetry:opentelemetry-context:1.+") + testParserClasspath("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.+") + testParserClasspath("io.micrometer:micrometer-tracing:1.+") + testParserClasspath("io.opentracing:opentracing-api:0.33.0") + testParserClasspath("org.springframework.cloud:spring-cloud-sleuth-api:3.1.+") } val rewriteVersion = rewriteRecipe.rewriteVersion.get() diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java new file mode 100644 index 000000000..2cf9603f2 --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java @@ -0,0 +1,83 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.ChangeType; + +import java.util.Arrays; +import java.util.List; + +/** + * Migrates Datadog tracing API types to OpenTelemetry API equivalents. + *

+ * This recipe handles the migration of: + *

+ */ +public class MigrateDatadogToOpenTelemetry extends Recipe { + + @Override + public String getDisplayName() { + return "Migrate Datadog tracing to OpenTelemetry"; + } + + @Override + public String getDescription() { + return "Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents. " + + "This includes migrating the Datadog Tracer, Span, SpanContext, Scope, and @Trace annotation."; + } + + @Override + public List getRecipeList() { + return Arrays.asList( + // Datadog core tracing types to OpenTelemetry + new ChangeType("datadog.trace.api.Tracer", "io.opentelemetry.api.trace.Tracer", true), + new ChangeType("io.opentracing.Tracer", "io.opentelemetry.api.trace.Tracer", true), + new ChangeType("datadog.trace.api.DDTracer", "io.opentelemetry.api.trace.Tracer", true), + + // Span types + new ChangeType("datadog.trace.api.Span", "io.opentelemetry.api.trace.Span", true), + new ChangeType("io.opentracing.Span", "io.opentelemetry.api.trace.Span", true), + new ChangeType("datadog.trace.api.DDSpan", "io.opentelemetry.api.trace.Span", true), + + // SpanContext + new ChangeType("datadog.trace.api.SpanContext", "io.opentelemetry.api.trace.SpanContext", true), + new ChangeType("io.opentracing.SpanContext", "io.opentelemetry.api.trace.SpanContext", true), + new ChangeType("datadog.trace.api.DDSpanContext", "io.opentelemetry.api.trace.SpanContext", true), + + // Scope + new ChangeType("datadog.trace.context.TraceScope", "io.opentelemetry.context.Scope", true), + new ChangeType("io.opentracing.Scope", "io.opentelemetry.context.Scope", true), + + // @Trace annotation to @WithSpan + new ChangeType("datadog.trace.api.Trace", "io.opentelemetry.instrumentation.annotations.WithSpan", true) + ); + } + + @Override + public TreeVisitor getVisitor() { + // Use the composite recipe approach via getRecipeList() + return TreeVisitor.noop(); + } +} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java new file mode 100644 index 000000000..f9d1e6116 --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java @@ -0,0 +1,80 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Preconditions; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.ChangeType; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.search.UsesType; + +import java.util.Arrays; +import java.util.List; + +/** + * Migrates OpenTracing API to OpenTelemetry API. + *

+ * OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained. + * This recipe handles the migration of core OpenTracing types to their OpenTelemetry equivalents. + * + * @see OpenTracing Migration Guide + */ +public class MigrateOpenTracingToOpenTelemetry extends Recipe { + + private static final String OPENTRACING_PACKAGE = "io.opentracing"; + private static final String OTEL_API_PACKAGE = "io.opentelemetry.api"; + private static final String OTEL_CONTEXT_PACKAGE = "io.opentelemetry.context"; + + @Override + public String getDisplayName() { + return "Migrate OpenTracing API to OpenTelemetry API"; + } + + @Override + public String getDescription() { + return "Migrate OpenTracing API to OpenTelemetry API. " + + "OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained."; + } + + @Override + public List getRecipeList() { + return Arrays.asList( + // Core types + new ChangeType(OPENTRACING_PACKAGE + ".Tracer", OTEL_API_PACKAGE + ".trace.Tracer", true), + new ChangeType(OPENTRACING_PACKAGE + ".Span", OTEL_API_PACKAGE + ".trace.Span", true), + new ChangeType(OPENTRACING_PACKAGE + ".SpanContext", OTEL_API_PACKAGE + ".trace.SpanContext", true), + new ChangeType(OPENTRACING_PACKAGE + ".Scope", OTEL_CONTEXT_PACKAGE + ".Scope", true), + new ChangeType(OPENTRACING_PACKAGE + ".ScopeManager", OTEL_CONTEXT_PACKAGE + ".Context", true), + + // Propagation types + new ChangeType(OPENTRACING_PACKAGE + ".propagation.Format", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapPropagator", true), + new ChangeType(OPENTRACING_PACKAGE + ".propagation.TextMapExtract", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapGetter", true), + new ChangeType(OPENTRACING_PACKAGE + ".propagation.TextMapInject", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapSetter", true) + ); + } + + @Override + public TreeVisitor getVisitor() { + return Preconditions.check( + new UsesType<>(OPENTRACING_PACKAGE + ".*", false), + new JavaIsoVisitor() { + // The actual migration is done by the recipe list above + } + ); + } +} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java new file mode 100644 index 000000000..766b285ea --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java @@ -0,0 +1,78 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Preconditions; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.ChangeType; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.search.UsesType; + +import java.util.Arrays; +import java.util.List; + +/** + * Migrates Spring Cloud Sleuth annotations to OpenTelemetry annotations. + *

+ * This recipe handles the migration of: + *

+ * + * @see OpenTelemetry Annotations + */ +public class MigrateSleuthAnnotationsToOpenTelemetry extends Recipe { + + private static final String SLEUTH_ANNOTATION_PACKAGE = "org.springframework.cloud.sleuth.annotation"; + private static final String OTEL_ANNOTATION_PACKAGE = "io.opentelemetry.instrumentation.annotations"; + + @Override + public String getDisplayName() { + return "Migrate Sleuth annotations to OpenTelemetry annotations"; + } + + @Override + public String getDescription() { + return "Migrate Spring Cloud Sleuth annotations (@NewSpan, @SpanTag, @ContinueSpan) " + + "to OpenTelemetry annotations (@WithSpan, @SpanAttribute)."; + } + + @Override + public List getRecipeList() { + return Arrays.asList( + // @NewSpan -> @WithSpan + new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".NewSpan", OTEL_ANNOTATION_PACKAGE + ".WithSpan", true), + // @SpanTag -> @SpanAttribute + new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".SpanTag", OTEL_ANNOTATION_PACKAGE + ".SpanAttribute", true), + // @ContinueSpan -> @WithSpan (note: semantics differ slightly) + new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".ContinueSpan", OTEL_ANNOTATION_PACKAGE + ".WithSpan", true) + ); + } + + @Override + public TreeVisitor getVisitor() { + return Preconditions.check( + new UsesType<>(SLEUTH_ANNOTATION_PACKAGE + ".*", false), + new JavaIsoVisitor() { + // The actual migration is done by the recipe list above + } + ); + } +} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java new file mode 100644 index 000000000..f7d6a87c2 --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java @@ -0,0 +1,93 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Preconditions; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.ChangePackage; +import org.openrewrite.java.ChangeType; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.search.UsesType; +import org.openrewrite.java.tree.J; + +import java.util.Arrays; +import java.util.List; + +/** + * Migrates Spring Cloud Sleuth API to Micrometer Tracing API. + *

+ * Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing + * with OpenTelemetry as the recommended backend. + * + * @see Spring Cloud Sleuth README + * @see Micrometer Tracing Documentation + */ +public class MigrateSleuthToMicrometerTracing extends Recipe { + + private static final String SLEUTH_PACKAGE = "org.springframework.cloud.sleuth"; + private static final String MICROMETER_TRACING_PACKAGE = "io.micrometer.tracing"; + + @Override + public String getDisplayName() { + return "Migrate Spring Cloud Sleuth to Micrometer Tracing"; + } + + @Override + public String getDescription() { + return "Migrate Spring Cloud Sleuth API to Micrometer Tracing API. " + + "Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing " + + "with OpenTelemetry as the recommended backend."; + } + + @Override + public List getRecipeList() { + return Arrays.asList( + // Core types migration + new ChangeType(SLEUTH_PACKAGE + ".Tracer", MICROMETER_TRACING_PACKAGE + ".Tracer", true), + new ChangeType(SLEUTH_PACKAGE + ".Span", MICROMETER_TRACING_PACKAGE + ".Span", true), + new ChangeType(SLEUTH_PACKAGE + ".Span$Kind", MICROMETER_TRACING_PACKAGE + ".Span$Kind", true), + new ChangeType(SLEUTH_PACKAGE + ".SpanCustomizer", MICROMETER_TRACING_PACKAGE + ".SpanCustomizer", true), + new ChangeType(SLEUTH_PACKAGE + ".CurrentTraceContext", MICROMETER_TRACING_PACKAGE + ".CurrentTraceContext", true), + new ChangeType(SLEUTH_PACKAGE + ".TraceContext", MICROMETER_TRACING_PACKAGE + ".TraceContext", true), + new ChangeType(SLEUTH_PACKAGE + ".ScopedSpan", MICROMETER_TRACING_PACKAGE + ".ScopedSpan", true), + new ChangeType(SLEUTH_PACKAGE + ".SpanAndScope", MICROMETER_TRACING_PACKAGE + ".SpanAndScope", true), + + // Baggage types + new ChangeType(SLEUTH_PACKAGE + ".Baggage", MICROMETER_TRACING_PACKAGE + ".Baggage", true), + new ChangeType(SLEUTH_PACKAGE + ".BaggageInScope", MICROMETER_TRACING_PACKAGE + ".BaggageInScope", true), + + // Propagation types + new ChangeType(SLEUTH_PACKAGE + ".propagation.Propagator", MICROMETER_TRACING_PACKAGE + ".propagation.Propagator", true), + + // Exporter types + new ChangeType(SLEUTH_PACKAGE + ".exporter.SpanFilter", MICROMETER_TRACING_PACKAGE + ".exporter.SpanExportingPredicate", true), + new ChangeType(SLEUTH_PACKAGE + ".exporter.SpanReporter", MICROMETER_TRACING_PACKAGE + ".exporter.SpanReporter", true) + ); + } + + @Override + public TreeVisitor getVisitor() { + return Preconditions.check( + new UsesType<>(SLEUTH_PACKAGE + ".*", false), + new JavaIsoVisitor() { + // The actual migration is done by the recipe list above + // This visitor serves as a precondition check + } + ); + } +} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java new file mode 100644 index 000000000..a54dc19c5 --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java @@ -0,0 +1,34 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Recipes for migrating to OpenTelemetry from various tracing solutions. + *

+ * This package contains recipes for migrating: + *

    + *
  • Spring Cloud Sleuth to Micrometer Tracing with OpenTelemetry backend
  • + *
  • Sleuth annotations to OpenTelemetry annotations
  • + *
  • OpenTracing to OpenTelemetry
  • + *
+ * + * @see OpenTelemetry Spring Boot Starter + * @see Micrometer Tracing + */ +@NonNullApi +@NonNullFields +package org.openrewrite.java.spring.opentelemetry; + +import org.openrewrite.internal.lang.NonNullApi; +import org.openrewrite.internal.lang.NonNullFields; diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml new file mode 100644 index 000000000..421e65412 --- /dev/null +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -0,0 +1,611 @@ +# +# Copyright 2025 the original author or authors. +#

+# Licensed under the Moderne Source Available License (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +#

+# https://docs.moderne.io/licensing/moderne-source-available-license +#

+# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation +displayName: Add OpenTelemetry Spring Boot auto instrumentation +description: >- + Add OpenTelemetry Spring Boot Starter for automatic instrumentation. This is the officially recommended + approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration + and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications. + See https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/ +tags: + - spring + - boot + - opentelemetry + - observability + - tracing +recipeList: + - org.openrewrite.java.spring.boot3.AddOpenTelemetryBom + - org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddOpenTelemetryBom +displayName: Add OpenTelemetry BOM +description: >- + Add the OpenTelemetry Instrumentation BOM to ensure version alignment across all OpenTelemetry dependencies. + This is a prerequisite for using the OpenTelemetry Spring Boot Starter. +tags: + - spring + - boot + - opentelemetry +recipeList: + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-bom + version: 2.23.0 + scope: import + type: pom + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency +displayName: Add OpenTelemetry Spring Boot Starter dependency +description: >- + Add the OpenTelemetry Spring Boot Starter dependency for automatic instrumentation of Spring Boot applications. + This starter provides out-of-the-box instrumentation for HTTP clients and servers, database access, messaging, + and more. +tags: + - spring + - boot + - opentelemetry +recipeList: + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-spring-boot-starter + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth +displayName: Migrate from Spring Cloud Sleuth to OpenTelemetry +description: >- + Migrate from Spring Cloud Sleuth to OpenTelemetry. Spring Cloud Sleuth has been deprecated and + is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth + dependencies and adds OpenTelemetry instrumentation. + See https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth +tags: + - spring + - boot + - opentelemetry + - sleuth + - migration + - observability +recipeList: + # Remove Spring Cloud Sleuth dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-starter-sleuth + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-sleuth-api + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-sleuth-otel + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-sleuth-otel-autoconfigure + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-sleuth-zipkin + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: org.springframework.cloud + artifactId: spring-cloud-sleuth-brave + # Add Micrometer Tracing with OpenTelemetry + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.micrometer + artifactId: micrometer-tracing-bridge-otel + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + # Add OpenTelemetry exporters for common backends + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-exporter-otlp + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + # Migrate Sleuth properties to OpenTelemetry/Micrometer properties + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.enabled + newPropertyKey: management.tracing.enabled + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.sampler.probability + newPropertyKey: management.tracing.sampling.probability + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.propagation.type + newPropertyKey: management.tracing.propagation.type + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.baggage.remote-fields + newPropertyKey: management.tracing.baggage.remote-fields + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.baggage.correlation-fields + newPropertyKey: management.tracing.baggage.correlation.fields + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.otel.exporter.otlp.endpoint + newPropertyKey: management.otlp.tracing.endpoint + - org.openrewrite.java.spring.ChangeSpringPropertyKey: + oldPropertyKey: spring.sleuth.otel.exporter.otlp.headers + newPropertyKey: management.otlp.tracing.headers + - org.openrewrite.java.spring.DeleteSpringProperty: + propertyKey: spring.sleuth.otel.config.trace-id-ratio-based + - org.openrewrite.java.spring.DeleteSpringProperty: + propertyKey: spring.sleuth.otel.resource.enabled + # Change Sleuth API imports to Micrometer Tracing + - org.openrewrite.java.ChangePackage: + oldPackageName: org.springframework.cloud.sleuth + newPackageName: io.micrometer.tracing + recursive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter +displayName: Add OpenTelemetry OTLP exporter +description: >- + Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an + OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector). +tags: + - spring + - boot + - opentelemetry + - otlp +recipeList: + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-exporter-otlp + onlyIfUsing: io.opentelemetry.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging +displayName: Add OpenTelemetry Logback instrumentation +description: >- + Add OpenTelemetry Logback appender for automatic log correlation with traces. + This enables trace context (trace ID and span ID) to be automatically added to log entries. +tags: + - spring + - boot + - opentelemetry + - logging +recipeList: + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-logback-appender-1.0 + onlyIfUsing: ch.qos.logback.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry +displayName: Migrate from Zipkin to OpenTelemetry OTLP +description: >- + Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies + with OpenTelemetry OTLP exporter and updates the related configuration properties. +tags: + - spring + - boot + - opentelemetry + - zipkin + - migration +recipeList: + # Remove Zipkin dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.reporter2 + artifactId: zipkin-reporter-brave + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.reporter2 + artifactId: zipkin-sender-urlconnection + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.reporter2 + artifactId: zipkin-sender-okhttp3 + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.reporter2 + artifactId: zipkin-sender-kafka + # Add OpenTelemetry OTLP exporter + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-exporter-otlp + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + # Note: The user will need to manually update their collector configuration + # to accept OTLP instead of Zipkin format + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23 +displayName: Upgrade to OpenTelemetry Java Instrumentation 2.23.0 +description: >- + Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. + This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4. +tags: + - spring + - boot + - opentelemetry +recipeList: + - org.openrewrite.java.dependencies.UpgradeDependencyVersion: + groupId: io.opentelemetry.instrumentation + artifactId: "*" + newVersion: 2.23.0 + - org.openrewrite.java.dependencies.UpgradeDependencyVersion: + groupId: io.opentelemetry + artifactId: "*" + newVersion: 1.57.0 + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot +displayName: Configure OpenTelemetry for Spring Boot +description: >- + Add basic OpenTelemetry configuration properties for Spring Boot applications. + This sets up OTLP exporter with a default localhost endpoint. +tags: + - spring + - boot + - opentelemetry + - configuration +recipeList: + # Enable tracing + - org.openrewrite.java.spring.AddSpringProperty: + property: management.tracing.enabled + value: "true" + # Set sampling probability to 100% for development (adjust for production) + - org.openrewrite.java.spring.AddSpringProperty: + property: management.tracing.sampling.probability + value: "1.0" + # Default OTLP endpoint (localhost collector) + - org.openrewrite.java.spring.AddSpringProperty: + property: management.otlp.tracing.endpoint + value: http://localhost:4318/v1/traces + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup +displayName: Complete OpenTelemetry setup for Spring Boot +description: >- + Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, + OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add + observability to Spring Boot applications using OpenTelemetry. +tags: + - spring + - boot + - opentelemetry + - observability + - tracing + - logging +recipeList: + - org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation + - org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter + - org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging + - org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing +displayName: Migrate Spring Cloud Sleuth API to Micrometer Tracing API +description: >- + Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. + This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer. +tags: + - spring + - boot + - opentelemetry + - sleuth + - micrometer + - tracing +recipeList: + # Migrate Sleuth Tracer to Micrometer Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Tracer + newFullyQualifiedTypeName: io.micrometer.tracing.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span + newFullyQualifiedTypeName: io.micrometer.tracing.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanCustomizer + newFullyQualifiedTypeName: io.micrometer.tracing.SpanCustomizer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.CurrentTraceContext + newFullyQualifiedTypeName: io.micrometer.tracing.CurrentTraceContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.TraceContext + newFullyQualifiedTypeName: io.micrometer.tracing.TraceContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.BaggageInScope + newFullyQualifiedTypeName: io.micrometer.tracing.BaggageInScope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Baggage + newFullyQualifiedTypeName: io.micrometer.tracing.Baggage + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.ScopedSpan + newFullyQualifiedTypeName: io.micrometer.tracing.ScopedSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanAndScope + newFullyQualifiedTypeName: io.micrometer.tracing.SpanAndScope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.propagation.Propagator + newFullyQualifiedTypeName: io.micrometer.tracing.propagation.Propagator + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanFilter + newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanExportingPredicate + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanReporter + newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanReporter + # Migrate Span.Kind enum + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span.Kind + newFullyQualifiedTypeName: io.micrometer.tracing.Span.Kind + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry +displayName: Migrate Brave API to OpenTelemetry API +description: >- + Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. + This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents. +tags: + - spring + - boot + - opentelemetry + - brave + - zipkin + - migration +recipeList: + # Migrate Brave Tracer to OpenTelemetry Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.Tracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.Span + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.SpanCustomizer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.Tracing + newFullyQualifiedTypeName: io.opentelemetry.api.OpenTelemetry + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.propagation.TraceContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.propagation.CurrentTraceContext + newFullyQualifiedTypeName: io.opentelemetry.context.Context + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: brave.baggage.BaggageField + newFullyQualifiedTypeName: io.opentelemetry.api.baggage.Baggage + # Remove Brave specific dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.brave + artifactId: brave + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.brave + artifactId: brave-instrumentation-http + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.brave + artifactId: brave-context-slf4j + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry +displayName: Migrate OpenTracing API to OpenTelemetry API +description: >- + Migrate Java code using OpenTracing API to OpenTelemetry API. + OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained. +tags: + - spring + - boot + - opentelemetry + - opentracing + - migration +recipeList: + # Migrate OpenTracing Tracer to OpenTelemetry Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Tracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Span + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.SpanContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Scope + newFullyQualifiedTypeName: io.opentelemetry.context.Scope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.ScopeManager + newFullyQualifiedTypeName: io.opentelemetry.context.Context + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.Format + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapPropagator + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapExtract + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapGetter + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapInject + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapSetter + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.tag.Tags + newFullyQualifiedTypeName: io.opentelemetry.semconv.SemanticAttributes + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.log.Fields + newFullyQualifiedTypeName: io.opentelemetry.api.common.AttributeKey + # Change package for contrib utilities + - org.openrewrite.java.ChangePackage: + oldPackageName: io.opentracing.contrib + newPackageName: io.opentelemetry.instrumentation + recursive: true + # Remove OpenTracing dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing + artifactId: opentracing-api + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing + artifactId: opentracing-util + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing + artifactId: opentracing-noop + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing.contrib + artifactId: "*" + # Add OpenTelemetry API dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-api + onlyIfUsing: io.opentelemetry.api.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport +displayName: Add OpenTelemetry @WithSpan annotation support +description: >- + Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable + @WithSpan and @SpanAttribute annotations for custom span creation. +tags: + - spring + - boot + - opentelemetry + - annotations +recipeList: + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + # Add Spring Boot AOP starter for annotation processing + - org.openrewrite.java.dependencies.AddDependency: + groupId: org.springframework.boot + artifactId: spring-boot-starter-aop + onlyIfUsing: io.opentelemetry.instrumentation.annotations.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry +displayName: Migrate New Relic Agent to OpenTelemetry +description: >- + Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. + Replace @Trace annotations with @WithSpan annotations. +tags: + - spring + - boot + - opentelemetry + - newrelic + - migration +recipeList: + # Change @Trace annotation to @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: com.newrelic.api.agent.Trace + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: com.newrelic.api.agent.NewRelic + newFullyQualifiedTypeName: io.opentelemetry.api.GlobalOpenTelemetry + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: io.opentelemetry.instrumentation.annotations.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry +displayName: Migrate Datadog tracing to OpenTelemetry +description: >- + Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. + Replace Datadog @Trace annotations with @WithSpan annotations. +tags: + - spring + - boot + - opentelemetry + - datadog + - migration +recipeList: + # Change Datadog @Trace annotation to @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.Trace + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.DDTags + newFullyQualifiedTypeName: io.opentelemetry.api.common.AttributeKey + # Remove Datadog dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: com.datadoghq + artifactId: dd-trace-api + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: io.opentelemetry.instrumentation.annotations.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry +displayName: Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan +description: >- + Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to + OpenTelemetry @WithSpan annotations. +tags: + - spring + - boot + - opentelemetry + - sleuth + - annotations +recipeList: + # Change @NewSpan to @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.NewSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # Change @SpanTag to @SpanAttribute + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.SpanTag + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.SpanAttribute + # ContinueSpan has no direct equivalent, but can be approximated with Span.current() + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.ContinueSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: io.opentelemetry.instrumentation.annotations.* + acceptTransitive: true + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration +displayName: Complete migration to OpenTelemetry +description: >- + Comprehensive migration to OpenTelemetry including dependencies, configuration properties, + and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, + and OpenTracing to OpenTelemetry. +tags: + - spring + - boot + - opentelemetry + - migration + - observability +recipeList: + - org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth + - org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing + - org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry + - org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation + - org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 20fbf2704..1f1986ed3 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -296,3 +296,25 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.Upgra maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2,Upgrade to SpringDoc 2.1,"Upgrade to SpringDoc v2.1, as described in the [upgrade guide](https://springdoc.org/#migrating-from-springdoc-v1).",147,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.MigrateSpringdocCommon,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common.,7,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.maven.spring.UpgradeExplicitSpringBootDependencies,Upgrade Spring dependencies,Upgrades dependencies according to the specified version of spring boot. Spring boot has many direct and transitive dependencies. When a module has an explicit dependency on one of these it may also need to be upgraded to match the version used by spring boot.,1,,,,,Spring,Maven,,,,,,,"[{""name"":""fromVersion"",""type"":""String"",""displayName"":""From Spring version"",""description"":""XRange pattern for spring version used to limit which projects should be updated"",""example"":"" 2.7.+"",""required"":true},{""name"":""toVersion"",""type"":""String"",""displayName"":""To Spring version"",""description"":""Upgrade version of `org.springframework.boot`"",""example"":""3.0.0-M3"",""required"":true}]", +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing,Migrate Spring Cloud Sleuth to Micrometer Tracing,Migrates Spring Cloud Sleuth API types to their Micrometer Tracing equivalents.,7,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry,Migrates Spring Cloud Sleuth annotations to OpenTelemetry instrumentation annotations.,3,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing to OpenTelemetry,Migrates OpenTracing API types to OpenTelemetry API equivalents.,7,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry auto-instrumentation for Spring Boot 3,Adds OpenTelemetry auto-instrumentation dependencies to Spring Boot 3 applications.,5,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryBom,Add OpenTelemetry BOM,Adds the OpenTelemetry instrumentation BOM for dependency management.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging,Add OpenTelemetry logging,Adds OpenTelemetry logging integration configuration.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,Adds OpenTelemetry OTLP exporter dependency and configuration.,2,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency,Add OpenTelemetry Spring Boot starter dependency,Adds the opentelemetry-spring-boot-starter dependency.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport,Add WithSpan annotation support,Adds the OpenTelemetry annotations dependency for @WithSpan support.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Configures OpenTelemetry properties for Spring Boot applications.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry,Migrate Brave to OpenTelemetry,Migrates from Brave tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry,Migrate Datadog to OpenTelemetry,Migrates from Datadog tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry,Migrates from Zipkin reporting to OpenTelemetry OTLP exporter.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry,Migrate New Relic to OpenTelemetry,Migrates from New Relic tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrates OpenTracing API types to OpenTelemetry API equivalents.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry annotations,Migrates Spring Cloud Sleuth annotations to OpenTelemetry instrumentation annotations.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing,Migrate Sleuth API to Micrometer Tracing,Migrates Spring Cloud Sleuth API to Micrometer Tracing API.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate to OpenTelemetry from Spring Cloud Sleuth,Comprehensive migration from Spring Cloud Sleuth to OpenTelemetry.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration,OpenTelemetry complete migration,Complete migration including dependency changes and code migrations from any tracing solution to OpenTelemetry.,9,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup,OpenTelemetry full setup,Complete setup for OpenTelemetry including auto-instrumentation and exporters.,2,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry 2.23,Upgrades OpenTelemetry dependencies to version 2.23.0.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents.,14,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java new file mode 100644 index 000000000..9a4728495 --- /dev/null +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java @@ -0,0 +1,266 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class MigrateDatadogToOpenTelemetryTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new MigrateDatadogToOpenTelemetry()) + .parser(JavaParser.fromJavaVersion() + //language=java + .dependsOn( + """ + package datadog.trace.api; + public interface Tracer {} + """, + """ + package datadog.trace.api; + public interface Span {} + """, + """ + package datadog.trace.api; + public interface SpanContext {} + """, + """ + package datadog.trace.api; + public class DDTracer implements Tracer {} + """, + """ + package datadog.trace.api; + public class DDSpan implements Span {} + """, + """ + package datadog.trace.api; + public class DDSpanContext implements SpanContext {} + """, + """ + package datadog.trace.context; + public interface TraceScope extends AutoCloseable {} + """, + """ + package datadog.trace.api; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface Trace { + String operationName() default ""; + String resourceName() default ""; + } + """, + """ + package io.opentelemetry.api.trace; + public interface Tracer {} + """, + """ + package io.opentelemetry.api.trace; + public interface Span {} + """, + """ + package io.opentelemetry.api.trace; + public interface SpanContext {} + """, + """ + package io.opentelemetry.context; + public interface Scope extends AutoCloseable {} + """, + """ + package io.opentelemetry.instrumentation.annotations; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface WithSpan { + String value() default ""; + } + """ + ) + ); + } + + @DocumentExample + @Test + void migrateDatadogTracer() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.Tracer; + + public class TracingService { + private Tracer tracer; + } + """, + """ + import io.opentelemetry.api.trace.Tracer; + + public class TracingService { + private Tracer tracer; + } + """ + ) + ); + } + + @Test + void migrateDatadogSpan() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.Span; + + public class SpanService { + private Span span; + } + """, + """ + import io.opentelemetry.api.trace.Span; + + public class SpanService { + private Span span; + } + """ + ) + ); + } + + @Test + void migrateDatadogSpanContext() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.SpanContext; + + public class ContextService { + private SpanContext context; + } + """, + """ + import io.opentelemetry.api.trace.SpanContext; + + public class ContextService { + private SpanContext context; + } + """ + ) + ); + } + + @Test + void migrateTraceScope() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.context.TraceScope; + + public class ScopedService { + private TraceScope scope; + } + """, + """ + import io.opentelemetry.context.Scope; + + public class ScopedService { + private Scope scope; + } + """ + ) + ); + } + + @Test + void migrateTraceAnnotation() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.Trace; + + public class TracedService { + @Trace + public void tracedMethod() { + } + } + """, + """ + import io.opentelemetry.instrumentation.annotations.WithSpan; + + public class TracedService { + @WithSpan + public void tracedMethod() { + } + } + """ + ) + ); + } + + @Test + void migrateDDTracer() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.DDTracer; + + public class TracerFactory { + private DDTracer tracer; + } + """, + """ + import io.opentelemetry.api.trace.Tracer; + + public class TracerFactory { + private Tracer tracer; + } + """ + ) + ); + } + + @Test + void migrateDDSpan() { + rewriteRun( + //language=java + java( + """ + import datadog.trace.api.DDSpan; + + public class SpanFactory { + private DDSpan span; + } + """, + """ + import io.opentelemetry.api.trace.Span; + + public class SpanFactory { + private Span span; + } + """ + ) + ); + } +} diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java new file mode 100644 index 000000000..ef48ec159 --- /dev/null +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java @@ -0,0 +1,205 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class MigrateOpenTracingToOpenTelemetryTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new MigrateOpenTracingToOpenTelemetry()) + .parser(JavaParser.fromJavaVersion() + //language=java + .dependsOn( + """ + package io.opentracing; + public interface Tracer {} + """, + """ + package io.opentracing; + public interface Span {} + """, + """ + package io.opentracing; + public interface SpanContext {} + """, + """ + package io.opentracing; + public interface Scope extends AutoCloseable {} + """, + """ + package io.opentracing.propagation; + public interface TextMapExtract {} + """, + """ + package io.opentracing.propagation; + public interface TextMapInject {} + """, + """ + package io.opentelemetry.api.trace; + public interface Tracer {} + """, + """ + package io.opentelemetry.api.trace; + public interface Span {} + """, + """ + package io.opentelemetry.api.trace; + public interface SpanContext {} + """, + """ + package io.opentelemetry.context; + public interface Scope extends AutoCloseable {} + """, + """ + package io.opentelemetry.context.propagation; + public interface TextMapGetter {} + """, + """ + package io.opentelemetry.context.propagation; + public interface TextMapSetter {} + """ + ) + ); + } + + @DocumentExample + @Test + void migrateTracer() { + rewriteRun( + //language=java + java( + """ + import io.opentracing.Tracer; + + public class OpenTracingService { + private Tracer tracer; + } + """, + """ + import io.opentelemetry.api.trace.Tracer; + + public class OpenTracingService { + private Tracer tracer; + } + """ + ) + ); + } + + @Test + void migrateSpan() { + rewriteRun( + //language=java + java( + """ + import io.opentracing.Span; + + public class SpanService { + private Span span; + } + """, + """ + import io.opentelemetry.api.trace.Span; + + public class SpanService { + private Span span; + } + """ + ) + ); + } + + @Test + void migrateSpanContext() { + rewriteRun( + //language=java + java( + """ + import io.opentracing.SpanContext; + + public class ContextService { + private SpanContext context; + } + """, + """ + import io.opentelemetry.api.trace.SpanContext; + + public class ContextService { + private SpanContext context; + } + """ + ) + ); + } + + @Test + void migrateScope() { + rewriteRun( + //language=java + java( + """ + import io.opentracing.Scope; + + public class ScopedService { + private Scope scope; + } + """, + """ + import io.opentelemetry.context.Scope; + + public class ScopedService { + private Scope scope; + } + """ + ) + ); + } + + @Test + void migratePropagation() { + rewriteRun( + //language=java + java( + """ + import io.opentracing.propagation.TextMapExtract; + import io.opentracing.propagation.TextMapInject; + + public class PropagationService { + private TextMapExtract extractor; + private TextMapInject injector; + } + """, + """ + import io.opentelemetry.context.propagation.TextMapGetter; + import io.opentelemetry.context.propagation.TextMapSetter; + + public class PropagationService { + private TextMapGetter extractor; + private TextMapSetter injector; + } + """ + ) + ); + } +} diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java new file mode 100644 index 000000000..6f74816b6 --- /dev/null +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java @@ -0,0 +1,189 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class MigrateSleuthAnnotationsToOpenTelemetryTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new MigrateSleuthAnnotationsToOpenTelemetry()) + .parser(JavaParser.fromJavaVersion() + //language=java + .dependsOn( + """ + package org.springframework.cloud.sleuth.annotation; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface NewSpan { + String value() default ""; + } + """, + """ + package org.springframework.cloud.sleuth.annotation; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.PARAMETER) + public @interface SpanTag { + String value() default ""; + } + """, + """ + package org.springframework.cloud.sleuth.annotation; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface ContinueSpan {} + """, + """ + package io.opentelemetry.instrumentation.annotations; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface WithSpan { + String value() default ""; + } + """, + """ + package io.opentelemetry.instrumentation.annotations; + import java.lang.annotation.*; + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.PARAMETER) + public @interface SpanAttribute { + String value() default ""; + } + """ + ) + ); + } + + @DocumentExample + @Test + void migrateNewSpanToWithSpan() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.annotation.NewSpan; + + public class TracedService { + @NewSpan + public void tracedMethod() { + } + } + """, + """ + import io.opentelemetry.instrumentation.annotations.WithSpan; + + public class TracedService { + @WithSpan + public void tracedMethod() { + } + } + """ + ) + ); + } + + @Test + void migrateSpanTagToSpanAttribute() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.annotation.SpanTag; + + public class TaggedService { + public void process(@SpanTag String orderId) { + } + } + """, + """ + import io.opentelemetry.instrumentation.annotations.SpanAttribute; + + public class TaggedService { + public void process(@SpanAttribute String orderId) { + } + } + """ + ) + ); + } + + @Test + void migrateContinueSpanToWithSpan() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.annotation.ContinueSpan; + + public class ContinuedService { + @ContinueSpan + public void continueProcessing() { + } + } + """, + """ + import io.opentelemetry.instrumentation.annotations.WithSpan; + + public class ContinuedService { + @WithSpan + public void continueProcessing() { + } + } + """ + ) + ); + } + + @Test + void migrateMultipleAnnotations() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.annotation.NewSpan; + import org.springframework.cloud.sleuth.annotation.SpanTag; + + public class OrderService { + @NewSpan + public void createOrder(@SpanTag String customerId) { + } + } + """, + """ + import io.opentelemetry.instrumentation.annotations.SpanAttribute; + import io.opentelemetry.instrumentation.annotations.WithSpan; + + public class OrderService { + @WithSpan + public void createOrder(@SpanAttribute String customerId) { + } + } + """ + ) + ); + } +} diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java new file mode 100644 index 000000000..ed12edc4b --- /dev/null +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java @@ -0,0 +1,186 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.spring.opentelemetry; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class MigrateSleuthToMicrometerTracingTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new MigrateSleuthToMicrometerTracing()) + .parser(JavaParser.fromJavaVersion() + //language=java + .dependsOn( + """ + package org.springframework.cloud.sleuth; + public interface Tracer {} + """, + """ + package org.springframework.cloud.sleuth; + public interface Span {} + """, + """ + package org.springframework.cloud.sleuth; + public interface Baggage {} + """, + """ + package org.springframework.cloud.sleuth; + public interface BaggageInScope {} + """, + """ + package org.springframework.cloud.sleuth; + public interface CurrentTraceContext {} + """, + """ + package org.springframework.cloud.sleuth; + public interface TraceContext {} + """, + """ + package io.micrometer.tracing; + public interface Tracer {} + """, + """ + package io.micrometer.tracing; + public interface Span {} + """, + """ + package io.micrometer.tracing; + public interface Baggage {} + """, + """ + package io.micrometer.tracing; + public interface BaggageInScope {} + """, + """ + package io.micrometer.tracing; + public interface CurrentTraceContext {} + """, + """ + package io.micrometer.tracing; + public interface TraceContext {} + """ + ) + ); + } + + @DocumentExample + @Test + void migrateTracerImport() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.Tracer; + + public class TracingService { + private Tracer tracer; + } + """, + """ + import io.micrometer.tracing.Tracer; + + public class TracingService { + private Tracer tracer; + } + """ + ) + ); + } + + @Test + void migrateSpanImport() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.Span; + + public class SpanService { + private Span span; + } + """, + """ + import io.micrometer.tracing.Span; + + public class SpanService { + private Span span; + } + """ + ) + ); + } + + @Test + void migrateBaggage() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.Baggage; + import org.springframework.cloud.sleuth.BaggageInScope; + + public class BaggageService { + private Baggage baggage; + private BaggageInScope scope; + } + """, + """ + import io.micrometer.tracing.Baggage; + import io.micrometer.tracing.BaggageInScope; + + public class BaggageService { + private Baggage baggage; + private BaggageInScope scope; + } + """ + ) + ); + } + + @Test + void migrateCurrentTraceContext() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.sleuth.CurrentTraceContext; + import org.springframework.cloud.sleuth.TraceContext; + + public class ContextService { + private CurrentTraceContext currentContext; + private TraceContext traceContext; + } + """, + """ + import io.micrometer.tracing.CurrentTraceContext; + import io.micrometer.tracing.TraceContext; + + public class ContextService { + private CurrentTraceContext currentContext; + private TraceContext traceContext; + } + """ + ) + ); + } +} From f85a8dcaf81ba0e76fe9957b53895be0180b5a6b Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Tue, 6 Jan 2026 23:14:13 +0100 Subject: [PATCH 02/17] parserClasspath entries were not used at all --- build.gradle.kts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 76b27ca56..5da4fc79f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -78,13 +78,6 @@ recipeDependencies { parserClasspath("org.springframework.cloud:spring-cloud-sleuth-api:3.1.+") - // OpenTelemetry dependencies - parserClasspath("io.opentelemetry:opentelemetry-api:1.+") - parserClasspath("io.opentelemetry:opentelemetry-context:1.+") - parserClasspath("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.+") - parserClasspath("io.micrometer:micrometer-tracing:1.+") - parserClasspath("io.opentracing:opentracing-api:0.33.0") - parserClasspath("org.springdoc:springdoc-openapi-starter-common:2.+") parserClasspath("com.nimbusds:nimbus-jose-jwt:9.13") @@ -184,14 +177,6 @@ recipeDependencies { testParserClasspath("org.springframework:spring-web:6.0.+") testParserClasspath("org.springframework:spring-web:6.1.8") testParserClasspath("org.springframework:spring-webflux:6.1.16") - - // OpenTelemetry test dependencies - testParserClasspath("io.opentelemetry:opentelemetry-api:1.+") - testParserClasspath("io.opentelemetry:opentelemetry-context:1.+") - testParserClasspath("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.+") - testParserClasspath("io.micrometer:micrometer-tracing:1.+") - testParserClasspath("io.opentracing:opentracing-api:0.33.0") - testParserClasspath("org.springframework.cloud:spring-cloud-sleuth-api:3.1.+") } val rewriteVersion = rewriteRecipe.rewriteVersion.get() From fe4f1f58f04908822d10afad994d2a0c34ddd81d Mon Sep 17 00:00:00 2001 From: Sandy Chen Date: Wed, 7 Jan 2026 08:50:42 +0900 Subject: [PATCH 03/17] feat(opentelemetry): simplify migration recipes for Sleuth and OpenTracing to Micrometer and OpenTelemetry --- .../META-INF/rewrite/opentelemetry.yml | 99 ++----------------- .../resources/META-INF/rewrite/recipes.csv | 6 +- 2 files changed, 9 insertions(+), 96 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 421e65412..b53a52da5 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -310,47 +310,8 @@ tags: - micrometer - tracing recipeList: - # Migrate Sleuth Tracer to Micrometer Tracer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Tracer - newFullyQualifiedTypeName: io.micrometer.tracing.Tracer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span - newFullyQualifiedTypeName: io.micrometer.tracing.Span - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanCustomizer - newFullyQualifiedTypeName: io.micrometer.tracing.SpanCustomizer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.CurrentTraceContext - newFullyQualifiedTypeName: io.micrometer.tracing.CurrentTraceContext - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.TraceContext - newFullyQualifiedTypeName: io.micrometer.tracing.TraceContext - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.BaggageInScope - newFullyQualifiedTypeName: io.micrometer.tracing.BaggageInScope - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Baggage - newFullyQualifiedTypeName: io.micrometer.tracing.Baggage - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.ScopedSpan - newFullyQualifiedTypeName: io.micrometer.tracing.ScopedSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanAndScope - newFullyQualifiedTypeName: io.micrometer.tracing.SpanAndScope - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.propagation.Propagator - newFullyQualifiedTypeName: io.micrometer.tracing.propagation.Propagator - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanFilter - newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanExportingPredicate - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanReporter - newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanReporter - # Migrate Span.Kind enum - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span.Kind - newFullyQualifiedTypeName: io.micrometer.tracing.Span.Kind + # Use the Java implementation for type migrations + - org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing --- type: specs.openrewrite.org/v1beta/recipe @@ -414,37 +375,8 @@ tags: - opentracing - migration recipeList: - # Migrate OpenTracing Tracer to OpenTelemetry Tracer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.Tracer - newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.Span - newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.SpanContext - newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.Scope - newFullyQualifiedTypeName: io.opentelemetry.context.Scope - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.ScopeManager - newFullyQualifiedTypeName: io.opentelemetry.context.Context - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.propagation.Format - newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapPropagator - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapExtract - newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapGetter - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapInject - newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapSetter - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.tag.Tags - newFullyQualifiedTypeName: io.opentelemetry.semconv.SemanticAttributes - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: io.opentracing.log.Fields - newFullyQualifiedTypeName: io.opentelemetry.api.common.AttributeKey + # Use the Java implementation for type migrations + - org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry # Change package for contrib utilities - org.openrewrite.java.ChangePackage: oldPackageName: io.opentracing.contrib @@ -538,13 +470,8 @@ tags: - datadog - migration recipeList: - # Change Datadog @Trace annotation to @WithSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: datadog.trace.api.Trace - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: datadog.trace.api.DDTags - newFullyQualifiedTypeName: io.opentelemetry.api.common.AttributeKey + # Use the Java implementation for complete type migrations + - org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry # Remove Datadog dependencies - org.openrewrite.java.dependencies.RemoveDependency: groupId: com.datadoghq @@ -570,18 +497,8 @@ tags: - sleuth - annotations recipeList: - # Change @NewSpan to @WithSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.NewSpan - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan - # Change @SpanTag to @SpanAttribute - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.SpanTag - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.SpanAttribute - # ContinueSpan has no direct equivalent, but can be approximated with Span.current() - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.ContinueSpan - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # Use the Java implementation for annotation migrations + - org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry # Add OpenTelemetry annotations dependency - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 1f1986ed3..7ea1cb3f5 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -98,7 +98,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2257,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -307,12 +307,8 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Ad maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport,Add WithSpan annotation support,Adds the OpenTelemetry annotations dependency for @WithSpan support.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Configures OpenTelemetry properties for Spring Boot applications.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry,Migrate Brave to OpenTelemetry,Migrates from Brave tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry,Migrate Datadog to OpenTelemetry,Migrates from Datadog tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry,Migrates from Zipkin reporting to OpenTelemetry OTLP exporter.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry,Migrate New Relic to OpenTelemetry,Migrates from New Relic tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrates OpenTracing API types to OpenTelemetry API equivalents.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry annotations,Migrates Spring Cloud Sleuth annotations to OpenTelemetry instrumentation annotations.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing,Migrate Sleuth API to Micrometer Tracing,Migrates Spring Cloud Sleuth API to Micrometer Tracing API.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate to OpenTelemetry from Spring Cloud Sleuth,Comprehensive migration from Spring Cloud Sleuth to OpenTelemetry.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration,OpenTelemetry complete migration,Complete migration including dependency changes and code migrations from any tracing solution to OpenTelemetry.,9,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup,OpenTelemetry full setup,Complete setup for OpenTelemetry including auto-instrumentation and exporters.,2,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, From 91c93ce37b9a2d89a665de29086e12a4902d358d Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 7 Jan 2026 12:59:35 +0100 Subject: [PATCH 04/17] Regenerate recipes.csv --- .../MigrateSleuthToMicrometerTracing.java | 2 - .../spring/opentelemetry/package-info.java | 7 +--- .../META-INF/rewrite/opentelemetry.yml | 12 +++--- .../resources/META-INF/rewrite/recipes.csv | 42 ++++++++++--------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java index f7d6a87c2..d1025a651 100644 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java @@ -19,11 +19,9 @@ import org.openrewrite.Preconditions; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; -import org.openrewrite.java.ChangePackage; import org.openrewrite.java.ChangeType; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.search.UsesType; -import org.openrewrite.java.tree.J; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java index a54dc19c5..67d36bf1c 100644 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java +++ b/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java @@ -26,9 +26,6 @@ * @see OpenTelemetry Spring Boot Starter * @see Micrometer Tracing */ -@NonNullApi -@NonNullFields +@org.jspecify.annotations.NullMarked +@org.openrewrite.internal.lang.NonNullFields package org.openrewrite.java.spring.opentelemetry; - -import org.openrewrite.internal.lang.NonNullApi; -import org.openrewrite.internal.lang.NonNullFields; diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index b53a52da5..8681466a0 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -19,10 +19,10 @@ type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation displayName: Add OpenTelemetry Spring Boot auto instrumentation description: >- - Add OpenTelemetry Spring Boot Starter for automatic instrumentation. This is the officially recommended - approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration - and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications. - See https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/ + Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for + automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with + OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for + Spring Boot native image applications. tags: - spring - boot @@ -78,10 +78,10 @@ type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth displayName: Migrate from Spring Cloud Sleuth to OpenTelemetry description: >- - Migrate from Spring Cloud Sleuth to OpenTelemetry. Spring Cloud Sleuth has been deprecated and + Migrate from Spring Cloud Sleuth to OpenTelemetry. + [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation. - See https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth tags: - spring - boot diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 5ba892836..4eda6d7cb 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -98,7 +98,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2263,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -123,6 +123,24 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot3BestPracticesOnly,Spring Boot 3.3 best practices (only),"Applies best practices to Spring Boot 3 applications, without chaining in upgrades to Spring Boot.",213,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceStringLiteralsWithConstants,Replace String literals with Spring constants,Replace String literals with Spring constants where applicable.,193,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.EnableVirtualThreads,Enable Virtual Threads on Java 21,Set `spring.threads.virtual.enabled` to `true` in `application.properties` or `application.yml`.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryBom,Add OpenTelemetry BOM,Add the OpenTelemetry Instrumentation BOM to ensure version alignment across all OpenTelemetry dependencies. This is a prerequisite for using the OpenTelemetry Spring Boot Starter.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency,Add OpenTelemetry Spring Boot Starter dependency,"Add the OpenTelemetry Spring Boot Starter dependency for automatic instrumentation of Spring Boot applications. This starter provides out-of-the-box instrumentation for HTTP clients and servers, database access, messaging, and more.",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceRestTemplateBuilderMethods,Replace deprecated setters in `RestTemplateBuilder`,"Replaces `setConnectTimeout`, `setReadTimeout`, and `setSslBundle` method invocations with `connectTimeout`, `readTimeout`, and `sslBundle` respectively.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_0,Upgrade MyBatis to Spring Boot 2.0,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.0.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_1,Upgrade MyBatis to Spring Boot 2.1,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.1.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -281,6 +299,10 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud202 maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2025.SpringCloudGatewayProxyWebMvcProperties,Migrate Spring Cloud Gateway Proxy WebMvc Properties,Migrate Spring Cloud Gateway Proxy WebMvc properties for Spring Cloud 2025 release.,5,,,,Cloud2025,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.UpgradeSpringSecurity_7_0,Migrate to Spring Security 7.0,"Migrate applications to the latest Spring Security 7.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions.",9,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.SecurityConfigurerRemoveThrowsException,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`.,5,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,"Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents. This includes migrating the Datadog Tracer, Span, SpanContext, Scope, and @Trace annotation.",25,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,17,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry annotations,"Migrate Spring Cloud Sleuth annotations (@NewSpan, @SpanTag, @ContinueSpan) to OpenTelemetry annotations (@WithSpan, @SpanAttribute).",7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing,Migrate Spring Cloud Sleuth to Micrometer Tracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API. Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing with OpenTelemetry as the recommended backend.,27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.MigrateToFlyway10,Migrate to Flyway 10,Migrate to Flyway 10. See details at [Flyway V10 has landed](https://documentation.red-gate.com/fd/flyway-v10-has-landed-222627771.html).,25,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModulePostgreSQL,Add missing Flyway module for PostgreSQL,"Database modules for Flyway 10 have been split out in to separate modules for maintainability. Add the `flyway-database-postgresql` dependency if you are using PostgreSQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleMySQL,Add missing Flyway module for MySQL,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-mysql` dependency if you are using MySQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, @@ -297,21 +319,3 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.Upgra maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2,Upgrade to SpringDoc 2.1,"Upgrade to SpringDoc v2.1, as described in the [upgrade guide](https://springdoc.org/#migrating-from-springdoc-v1).",147,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.MigrateSpringdocCommon,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common.,7,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.maven.spring.UpgradeExplicitSpringBootDependencies,Upgrade Spring dependencies,Upgrades dependencies according to the specified version of spring boot. Spring boot has many direct and transitive dependencies. When a module has an explicit dependency on one of these it may also need to be upgraded to match the version used by spring boot.,1,,,,,Spring,Maven,,,,,,,"[{""name"":""fromVersion"",""type"":""String"",""displayName"":""From Spring version"",""description"":""XRange pattern for spring version used to limit which projects should be updated"",""example"":"" 2.7.+"",""required"":true},{""name"":""toVersion"",""type"":""String"",""displayName"":""To Spring version"",""description"":""Upgrade version of `org.springframework.boot`"",""example"":""3.0.0-M3"",""required"":true}]", -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing,Migrate Spring Cloud Sleuth to Micrometer Tracing,Migrates Spring Cloud Sleuth API types to their Micrometer Tracing equivalents.,7,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry,Migrates Spring Cloud Sleuth annotations to OpenTelemetry instrumentation annotations.,3,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing to OpenTelemetry,Migrates OpenTracing API types to OpenTelemetry API equivalents.,7,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry auto-instrumentation for Spring Boot 3,Adds OpenTelemetry auto-instrumentation dependencies to Spring Boot 3 applications.,5,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryBom,Add OpenTelemetry BOM,Adds the OpenTelemetry instrumentation BOM for dependency management.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging,Add OpenTelemetry logging,Adds OpenTelemetry logging integration configuration.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,Adds OpenTelemetry OTLP exporter dependency and configuration.,2,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency,Add OpenTelemetry Spring Boot starter dependency,Adds the opentelemetry-spring-boot-starter dependency.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport,Add WithSpan annotation support,Adds the OpenTelemetry annotations dependency for @WithSpan support.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Configures OpenTelemetry properties for Spring Boot applications.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry,Migrate Brave to OpenTelemetry,Migrates from Brave tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry,Migrates from Zipkin reporting to OpenTelemetry OTLP exporter.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry,Migrate New Relic to OpenTelemetry,Migrates from New Relic tracing to OpenTelemetry.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate to OpenTelemetry from Spring Cloud Sleuth,Comprehensive migration from Spring Cloud Sleuth to OpenTelemetry.,4,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration,OpenTelemetry complete migration,Complete migration including dependency changes and code migrations from any tracing solution to OpenTelemetry.,9,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup,OpenTelemetry full setup,Complete setup for OpenTelemetry including auto-instrumentation and exporters.,2,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry 2.23,Upgrades OpenTelemetry dependencies to version 2.23.0.,1,,,,,Spring Boot,Java,,,,,Recipes for upgrading and patching [Spring Boot](https://spring.io/projects/spring-boot) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents.,14,,,,,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, From 134b83659368f38b90901d5c6e21b507a8bc70ae Mon Sep 17 00:00:00 2001 From: Sandy Chen Date: Thu, 8 Jan 2026 16:40:41 +0900 Subject: [PATCH 05/17] chore(): Replaces Java migration recipes with YAML equivalents --- .../MigrateDatadogToOpenTelemetry.java | 83 ----------- .../MigrateOpenTracingToOpenTelemetry.java | 80 ----------- ...grateSleuthAnnotationsToOpenTelemetry.java | 78 ----------- .../MigrateSleuthToMicrometerTracing.java | 91 ------------ .../META-INF/rewrite/opentelemetry.yml | 130 ++++++++++++++++-- .../resources/META-INF/rewrite/recipes.csv | 4 - .../MigrateDatadogToOpenTelemetryTest.java | 2 +- ...MigrateOpenTracingToOpenTelemetryTest.java | 2 +- ...eSleuthAnnotationsToOpenTelemetryTest.java | 2 +- .../MigrateSleuthToMicrometerTracingTest.java | 2 +- 10 files changed, 126 insertions(+), 348 deletions(-) delete mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java delete mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java delete mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java delete mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java deleted file mode 100644 index 2cf9603f2..000000000 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetry.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2025 the original author or authors. - *

- * Licensed under the Moderne Source Available License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * https://docs.moderne.io/licensing/moderne-source-available-license - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.openrewrite.java.spring.opentelemetry; - -import org.openrewrite.ExecutionContext; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.ChangeType; - -import java.util.Arrays; -import java.util.List; - -/** - * Migrates Datadog tracing API types to OpenTelemetry API equivalents. - *

- * This recipe handles the migration of: - *

    - *
  • Datadog Tracer → OpenTelemetry Tracer
  • - *
  • Datadog Span → OpenTelemetry Span
  • - *
  • Datadog SpanContext → OpenTelemetry SpanContext
  • - *
  • Datadog Scope → OpenTelemetry Scope
  • - *
  • Datadog @Trace annotation → OpenTelemetry @WithSpan
  • - *
- */ -public class MigrateDatadogToOpenTelemetry extends Recipe { - - @Override - public String getDisplayName() { - return "Migrate Datadog tracing to OpenTelemetry"; - } - - @Override - public String getDescription() { - return "Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents. " + - "This includes migrating the Datadog Tracer, Span, SpanContext, Scope, and @Trace annotation."; - } - - @Override - public List getRecipeList() { - return Arrays.asList( - // Datadog core tracing types to OpenTelemetry - new ChangeType("datadog.trace.api.Tracer", "io.opentelemetry.api.trace.Tracer", true), - new ChangeType("io.opentracing.Tracer", "io.opentelemetry.api.trace.Tracer", true), - new ChangeType("datadog.trace.api.DDTracer", "io.opentelemetry.api.trace.Tracer", true), - - // Span types - new ChangeType("datadog.trace.api.Span", "io.opentelemetry.api.trace.Span", true), - new ChangeType("io.opentracing.Span", "io.opentelemetry.api.trace.Span", true), - new ChangeType("datadog.trace.api.DDSpan", "io.opentelemetry.api.trace.Span", true), - - // SpanContext - new ChangeType("datadog.trace.api.SpanContext", "io.opentelemetry.api.trace.SpanContext", true), - new ChangeType("io.opentracing.SpanContext", "io.opentelemetry.api.trace.SpanContext", true), - new ChangeType("datadog.trace.api.DDSpanContext", "io.opentelemetry.api.trace.SpanContext", true), - - // Scope - new ChangeType("datadog.trace.context.TraceScope", "io.opentelemetry.context.Scope", true), - new ChangeType("io.opentracing.Scope", "io.opentelemetry.context.Scope", true), - - // @Trace annotation to @WithSpan - new ChangeType("datadog.trace.api.Trace", "io.opentelemetry.instrumentation.annotations.WithSpan", true) - ); - } - - @Override - public TreeVisitor getVisitor() { - // Use the composite recipe approach via getRecipeList() - return TreeVisitor.noop(); - } -} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java deleted file mode 100644 index f9d1e6116..000000000 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetry.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2025 the original author or authors. - *

- * Licensed under the Moderne Source Available License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * https://docs.moderne.io/licensing/moderne-source-available-license - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.openrewrite.java.spring.opentelemetry; - -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.ChangeType; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.search.UsesType; - -import java.util.Arrays; -import java.util.List; - -/** - * Migrates OpenTracing API to OpenTelemetry API. - *

- * OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained. - * This recipe handles the migration of core OpenTracing types to their OpenTelemetry equivalents. - * - * @see OpenTracing Migration Guide - */ -public class MigrateOpenTracingToOpenTelemetry extends Recipe { - - private static final String OPENTRACING_PACKAGE = "io.opentracing"; - private static final String OTEL_API_PACKAGE = "io.opentelemetry.api"; - private static final String OTEL_CONTEXT_PACKAGE = "io.opentelemetry.context"; - - @Override - public String getDisplayName() { - return "Migrate OpenTracing API to OpenTelemetry API"; - } - - @Override - public String getDescription() { - return "Migrate OpenTracing API to OpenTelemetry API. " + - "OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained."; - } - - @Override - public List getRecipeList() { - return Arrays.asList( - // Core types - new ChangeType(OPENTRACING_PACKAGE + ".Tracer", OTEL_API_PACKAGE + ".trace.Tracer", true), - new ChangeType(OPENTRACING_PACKAGE + ".Span", OTEL_API_PACKAGE + ".trace.Span", true), - new ChangeType(OPENTRACING_PACKAGE + ".SpanContext", OTEL_API_PACKAGE + ".trace.SpanContext", true), - new ChangeType(OPENTRACING_PACKAGE + ".Scope", OTEL_CONTEXT_PACKAGE + ".Scope", true), - new ChangeType(OPENTRACING_PACKAGE + ".ScopeManager", OTEL_CONTEXT_PACKAGE + ".Context", true), - - // Propagation types - new ChangeType(OPENTRACING_PACKAGE + ".propagation.Format", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapPropagator", true), - new ChangeType(OPENTRACING_PACKAGE + ".propagation.TextMapExtract", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapGetter", true), - new ChangeType(OPENTRACING_PACKAGE + ".propagation.TextMapInject", OTEL_CONTEXT_PACKAGE + ".propagation.TextMapSetter", true) - ); - } - - @Override - public TreeVisitor getVisitor() { - return Preconditions.check( - new UsesType<>(OPENTRACING_PACKAGE + ".*", false), - new JavaIsoVisitor() { - // The actual migration is done by the recipe list above - } - ); - } -} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java deleted file mode 100644 index 766b285ea..000000000 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetry.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2025 the original author or authors. - *

- * Licensed under the Moderne Source Available License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * https://docs.moderne.io/licensing/moderne-source-available-license - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.openrewrite.java.spring.opentelemetry; - -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.ChangeType; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.search.UsesType; - -import java.util.Arrays; -import java.util.List; - -/** - * Migrates Spring Cloud Sleuth annotations to OpenTelemetry annotations. - *

- * This recipe handles the migration of: - *

    - *
  • {@code @NewSpan} → {@code @WithSpan}
  • - *
  • {@code @SpanTag} → {@code @SpanAttribute}
  • - *
  • {@code @ContinueSpan} → {@code @WithSpan}
  • - *
- * - * @see OpenTelemetry Annotations - */ -public class MigrateSleuthAnnotationsToOpenTelemetry extends Recipe { - - private static final String SLEUTH_ANNOTATION_PACKAGE = "org.springframework.cloud.sleuth.annotation"; - private static final String OTEL_ANNOTATION_PACKAGE = "io.opentelemetry.instrumentation.annotations"; - - @Override - public String getDisplayName() { - return "Migrate Sleuth annotations to OpenTelemetry annotations"; - } - - @Override - public String getDescription() { - return "Migrate Spring Cloud Sleuth annotations (@NewSpan, @SpanTag, @ContinueSpan) " + - "to OpenTelemetry annotations (@WithSpan, @SpanAttribute)."; - } - - @Override - public List getRecipeList() { - return Arrays.asList( - // @NewSpan -> @WithSpan - new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".NewSpan", OTEL_ANNOTATION_PACKAGE + ".WithSpan", true), - // @SpanTag -> @SpanAttribute - new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".SpanTag", OTEL_ANNOTATION_PACKAGE + ".SpanAttribute", true), - // @ContinueSpan -> @WithSpan (note: semantics differ slightly) - new ChangeType(SLEUTH_ANNOTATION_PACKAGE + ".ContinueSpan", OTEL_ANNOTATION_PACKAGE + ".WithSpan", true) - ); - } - - @Override - public TreeVisitor getVisitor() { - return Preconditions.check( - new UsesType<>(SLEUTH_ANNOTATION_PACKAGE + ".*", false), - new JavaIsoVisitor() { - // The actual migration is done by the recipe list above - } - ); - } -} diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java deleted file mode 100644 index d1025a651..000000000 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracing.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2025 the original author or authors. - *

- * Licensed under the Moderne Source Available License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * https://docs.moderne.io/licensing/moderne-source-available-license - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.openrewrite.java.spring.opentelemetry; - -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.ChangeType; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.search.UsesType; - -import java.util.Arrays; -import java.util.List; - -/** - * Migrates Spring Cloud Sleuth API to Micrometer Tracing API. - *

- * Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing - * with OpenTelemetry as the recommended backend. - * - * @see Spring Cloud Sleuth README - * @see Micrometer Tracing Documentation - */ -public class MigrateSleuthToMicrometerTracing extends Recipe { - - private static final String SLEUTH_PACKAGE = "org.springframework.cloud.sleuth"; - private static final String MICROMETER_TRACING_PACKAGE = "io.micrometer.tracing"; - - @Override - public String getDisplayName() { - return "Migrate Spring Cloud Sleuth to Micrometer Tracing"; - } - - @Override - public String getDescription() { - return "Migrate Spring Cloud Sleuth API to Micrometer Tracing API. " + - "Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing " + - "with OpenTelemetry as the recommended backend."; - } - - @Override - public List getRecipeList() { - return Arrays.asList( - // Core types migration - new ChangeType(SLEUTH_PACKAGE + ".Tracer", MICROMETER_TRACING_PACKAGE + ".Tracer", true), - new ChangeType(SLEUTH_PACKAGE + ".Span", MICROMETER_TRACING_PACKAGE + ".Span", true), - new ChangeType(SLEUTH_PACKAGE + ".Span$Kind", MICROMETER_TRACING_PACKAGE + ".Span$Kind", true), - new ChangeType(SLEUTH_PACKAGE + ".SpanCustomizer", MICROMETER_TRACING_PACKAGE + ".SpanCustomizer", true), - new ChangeType(SLEUTH_PACKAGE + ".CurrentTraceContext", MICROMETER_TRACING_PACKAGE + ".CurrentTraceContext", true), - new ChangeType(SLEUTH_PACKAGE + ".TraceContext", MICROMETER_TRACING_PACKAGE + ".TraceContext", true), - new ChangeType(SLEUTH_PACKAGE + ".ScopedSpan", MICROMETER_TRACING_PACKAGE + ".ScopedSpan", true), - new ChangeType(SLEUTH_PACKAGE + ".SpanAndScope", MICROMETER_TRACING_PACKAGE + ".SpanAndScope", true), - - // Baggage types - new ChangeType(SLEUTH_PACKAGE + ".Baggage", MICROMETER_TRACING_PACKAGE + ".Baggage", true), - new ChangeType(SLEUTH_PACKAGE + ".BaggageInScope", MICROMETER_TRACING_PACKAGE + ".BaggageInScope", true), - - // Propagation types - new ChangeType(SLEUTH_PACKAGE + ".propagation.Propagator", MICROMETER_TRACING_PACKAGE + ".propagation.Propagator", true), - - // Exporter types - new ChangeType(SLEUTH_PACKAGE + ".exporter.SpanFilter", MICROMETER_TRACING_PACKAGE + ".exporter.SpanExportingPredicate", true), - new ChangeType(SLEUTH_PACKAGE + ".exporter.SpanReporter", MICROMETER_TRACING_PACKAGE + ".exporter.SpanReporter", true) - ); - } - - @Override - public TreeVisitor getVisitor() { - return Preconditions.check( - new UsesType<>(SLEUTH_PACKAGE + ".*", false), - new JavaIsoVisitor() { - // The actual migration is done by the recipe list above - // This visitor serves as a precondition check - } - ); - } -} diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 8681466a0..b516ed9d8 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -310,8 +310,49 @@ tags: - micrometer - tracing recipeList: - # Use the Java implementation for type migrations - - org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing + # Core types migration + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Tracer + newFullyQualifiedTypeName: io.micrometer.tracing.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span + newFullyQualifiedTypeName: io.micrometer.tracing.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span$Kind + newFullyQualifiedTypeName: io.micrometer.tracing.Span$Kind + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanCustomizer + newFullyQualifiedTypeName: io.micrometer.tracing.SpanCustomizer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.CurrentTraceContext + newFullyQualifiedTypeName: io.micrometer.tracing.CurrentTraceContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.TraceContext + newFullyQualifiedTypeName: io.micrometer.tracing.TraceContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.ScopedSpan + newFullyQualifiedTypeName: io.micrometer.tracing.ScopedSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanAndScope + newFullyQualifiedTypeName: io.micrometer.tracing.SpanAndScope + # Baggage types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Baggage + newFullyQualifiedTypeName: io.micrometer.tracing.Baggage + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.BaggageInScope + newFullyQualifiedTypeName: io.micrometer.tracing.BaggageInScope + # Propagation types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.propagation.Propagator + newFullyQualifiedTypeName: io.micrometer.tracing.propagation.Propagator + # Exporter types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanFilter + newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanExportingPredicate + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanReporter + newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanReporter --- type: specs.openrewrite.org/v1beta/recipe @@ -375,8 +416,32 @@ tags: - opentracing - migration recipeList: - # Use the Java implementation for type migrations - - org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry + # Core types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Tracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Span + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.SpanContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Scope + newFullyQualifiedTypeName: io.opentelemetry.context.Scope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.ScopeManager + newFullyQualifiedTypeName: io.opentelemetry.context.Context + # Propagation types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.Format + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapPropagator + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapExtract + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapGetter + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.propagation.TextMapInject + newFullyQualifiedTypeName: io.opentelemetry.context.propagation.TextMapSetter # Change package for contrib utilities - org.openrewrite.java.ChangePackage: oldPackageName: io.opentracing.contrib @@ -470,8 +535,47 @@ tags: - datadog - migration recipeList: - # Use the Java implementation for complete type migrations - - org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry + # Datadog core tracing types to OpenTelemetry + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.Tracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Tracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.DDTracer + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Tracer + # Span types + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.Span + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Span + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.DDSpan + newFullyQualifiedTypeName: io.opentelemetry.api.trace.Span + # SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.SpanContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.SpanContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.DDSpanContext + newFullyQualifiedTypeName: io.opentelemetry.api.trace.SpanContext + # Scope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.context.TraceScope + newFullyQualifiedTypeName: io.opentelemetry.context.Scope + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.opentracing.Scope + newFullyQualifiedTypeName: io.opentelemetry.context.Scope + # @Trace annotation to @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: datadog.trace.api.Trace + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan # Remove Datadog dependencies - org.openrewrite.java.dependencies.RemoveDependency: groupId: com.datadoghq @@ -497,8 +601,18 @@ tags: - sleuth - annotations recipeList: - # Use the Java implementation for annotation migrations - - org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry + # @NewSpan -> @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.NewSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # @SpanTag -> @SpanAttribute + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.SpanTag + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.SpanAttribute + # @ContinueSpan -> @WithSpan (note: semantics differ slightly) + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.ContinueSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan # Add OpenTelemetry annotations dependency - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 4eda6d7cb..a2cc33885 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -299,10 +299,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud202 maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2025.SpringCloudGatewayProxyWebMvcProperties,Migrate Spring Cloud Gateway Proxy WebMvc Properties,Migrate Spring Cloud Gateway Proxy WebMvc properties for Spring Cloud 2025 release.,5,,,,Cloud2025,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.UpgradeSpringSecurity_7_0,Migrate to Spring Security 7.0,"Migrate applications to the latest Spring Security 7.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions.",9,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.SecurityConfigurerRemoveThrowsException,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`.,5,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,"Migrates Datadog tracing API types and annotations to OpenTelemetry API equivalents. This includes migrating the Datadog Tracer, Span, SpanContext, Scope, and @Trace annotation.",25,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,17,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth annotations to OpenTelemetry annotations,"Migrate Spring Cloud Sleuth annotations (@NewSpan, @SpanTag, @ContinueSpan) to OpenTelemetry annotations (@WithSpan, @SpanAttribute).",7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthToMicrometerTracing,Migrate Spring Cloud Sleuth to Micrometer Tracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API. Spring Cloud Sleuth has been deprecated and is replaced by Micrometer Tracing with OpenTelemetry as the recommended backend.,27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.MigrateToFlyway10,Migrate to Flyway 10,Migrate to Flyway 10. See details at [Flyway V10 has landed](https://documentation.red-gate.com/fd/flyway-v10-has-landed-222627771.html).,25,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModulePostgreSQL,Add missing Flyway module for PostgreSQL,"Database modules for Flyway 10 have been split out in to separate modules for maintainability. Add the `flyway-database-postgresql` dependency if you are using PostgreSQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleMySQL,Add missing Flyway module for MySQL,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-mysql` dependency if you are using MySQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java index 9a4728495..2cf8a6e66 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateDatadogToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipe(new MigrateDatadogToOpenTelemetry()) + spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java index ef48ec159..51bdcade3 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateOpenTracingToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipe(new MigrateOpenTracingToOpenTelemetry()) + spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java index 6f74816b6..79f56831f 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateSleuthAnnotationsToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipe(new MigrateSleuthAnnotationsToOpenTelemetry()) + spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java index ed12edc4b..d80a65746 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java @@ -27,7 +27,7 @@ class MigrateSleuthToMicrometerTracingTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipe(new MigrateSleuthToMicrometerTracing()) + spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( From 4c11784bf27eedd9aa7003f240c8752bd43975e0 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 13:35:12 +0100 Subject: [PATCH 06/17] Inline two recipes and delete package-info.java --- .../spring/opentelemetry/package-info.java | 31 ------------------ .../META-INF/rewrite/opentelemetry.yml | 32 ++----------------- .../resources/META-INF/rewrite/recipes.csv | 4 +-- 3 files changed, 3 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java diff --git a/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java b/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java deleted file mode 100644 index 67d36bf1c..000000000 --- a/src/main/java/org/openrewrite/java/spring/opentelemetry/package-info.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2025 the original author or authors. - *

- * Licensed under the Moderne Source Available License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * https://docs.moderne.io/licensing/moderne-source-available-license - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * Recipes for migrating to OpenTelemetry from various tracing solutions. - *

- * This package contains recipes for migrating: - *

    - *
  • Spring Cloud Sleuth to Micrometer Tracing with OpenTelemetry backend
  • - *
  • Sleuth annotations to OpenTelemetry annotations
  • - *
  • OpenTracing to OpenTelemetry
  • - *
- * - * @see OpenTelemetry Spring Boot Starter - * @see Micrometer Tracing - */ -@org.jspecify.annotations.NullMarked -@org.openrewrite.internal.lang.NonNullFields -package org.openrewrite.java.spring.opentelemetry; diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index b516ed9d8..cd17cca3a 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -29,47 +29,19 @@ tags: - opentelemetry - observability - tracing -recipeList: - - org.openrewrite.java.spring.boot3.AddOpenTelemetryBom - - org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddOpenTelemetryBom -displayName: Add OpenTelemetry BOM -description: >- - Add the OpenTelemetry Instrumentation BOM to ensure version alignment across all OpenTelemetry dependencies. - This is a prerequisite for using the OpenTelemetry Spring Boot Starter. -tags: - - spring - - boot - - opentelemetry recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-instrumentation-bom - version: 2.23.0 + version: 2.x scope: import type: pom onlyIfUsing: org.springframework.boot.* acceptTransitive: true - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency -displayName: Add OpenTelemetry Spring Boot Starter dependency -description: >- - Add the OpenTelemetry Spring Boot Starter dependency for automatic instrumentation of Spring Boot applications. - This starter provides out-of-the-box instrumentation for HTTP clients and servers, database access, messaging, - and more. -tags: - - spring - - boot - - opentelemetry -recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-spring-boot-starter + version: 2.x onlyIfUsing: org.springframework.boot.* acceptTransitive: true diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index a2cc33885..2b22b66c4 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -98,7 +98,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2263,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -124,8 +124,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceStringLiteralsWithConstants,Replace String literals with Spring constants,Replace String literals with Spring constants where applicable.,193,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.EnableVirtualThreads,Enable Virtual Threads on Java 21,Set `spring.threads.virtual.enabled` to `true` in `application.properties` or `application.yml`.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryBom,Add OpenTelemetry BOM,Add the OpenTelemetry Instrumentation BOM to ensure version alignment across all OpenTelemetry dependencies. This is a prerequisite for using the OpenTelemetry Spring Boot Starter.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryStarterDependency,Add OpenTelemetry Spring Boot Starter dependency,"Add the OpenTelemetry Spring Boot Starter dependency for automatic instrumentation of Spring Boot applications. This starter provides out-of-the-box instrumentation for HTTP clients and servers, database access, messaging, and more.",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, From f954a0ab49da23d6d4d572ee88061e654af1e2be Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 13:43:41 +0100 Subject: [PATCH 07/17] Change package to spring.opentelemetry --- .../META-INF/rewrite/opentelemetry.yml | 50 +++++++++---------- .../resources/META-INF/rewrite/recipes.csv | 34 ++++++------- .../MigrateDatadogToOpenTelemetryTest.java | 2 +- ...MigrateOpenTracingToOpenTelemetryTest.java | 2 +- ...eSleuthAnnotationsToOpenTelemetryTest.java | 2 +- .../MigrateSleuthToMicrometerTracingTest.java | 2 +- 6 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index cd17cca3a..645414edc 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -16,7 +16,7 @@ --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation +name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation displayName: Add OpenTelemetry Spring Boot auto instrumentation description: >- Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for @@ -47,7 +47,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth +name: org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth displayName: Migrate from Spring Cloud Sleuth to OpenTelemetry description: >- Migrate from Spring Cloud Sleuth to OpenTelemetry. @@ -127,7 +127,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter +name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter displayName: Add OpenTelemetry OTLP exporter description: >- Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an @@ -146,7 +146,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging +name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging displayName: Add OpenTelemetry Logback instrumentation description: >- Add OpenTelemetry Logback appender for automatic log correlation with traces. @@ -165,7 +165,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry displayName: Migrate from Zipkin to OpenTelemetry OTLP description: >- Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies @@ -201,7 +201,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23 +name: org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23 displayName: Upgrade to OpenTelemetry Java Instrumentation 2.23.0 description: >- Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. @@ -222,7 +222,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot +name: org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot displayName: Configure OpenTelemetry for Spring Boot description: >- Add basic OpenTelemetry configuration properties for Spring Boot applications. @@ -248,7 +248,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup +name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup displayName: Complete OpenTelemetry setup for Spring Boot description: >- Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, @@ -262,14 +262,14 @@ tags: - tracing - logging recipeList: - - org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation - - org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter - - org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging - - org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot + - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation + - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter + - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging + - org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing +name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing displayName: Migrate Spring Cloud Sleuth API to Micrometer Tracing API description: >- Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. @@ -328,7 +328,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry displayName: Migrate Brave API to OpenTelemetry API description: >- Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. @@ -376,7 +376,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry displayName: Migrate OpenTracing API to OpenTelemetry API description: >- Migrate Java code using OpenTracing API to OpenTelemetry API. @@ -441,7 +441,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport +name: org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport displayName: Add OpenTelemetry @WithSpan annotation support description: >- Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @@ -467,7 +467,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry displayName: Migrate New Relic Agent to OpenTelemetry description: >- Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. @@ -495,7 +495,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry displayName: Migrate Datadog tracing to OpenTelemetry description: >- Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. @@ -561,7 +561,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry +name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry displayName: Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan description: >- Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to @@ -594,7 +594,7 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration +name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration displayName: Complete migration to OpenTelemetry description: >- Comprehensive migration to OpenTelemetry including dependencies, configuration properties, @@ -607,8 +607,8 @@ tags: - migration - observability recipeList: - - org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth - - org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing - - org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry - - org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation - - org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport + - org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth + - org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing + - org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation + - org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 2b22b66c4..23542abac 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -123,23 +123,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot3BestPracticesOnly,Spring Boot 3.3 best practices (only),"Applies best practices to Spring Boot 3 applications, without chaining in upgrades to Spring Boot.",213,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceStringLiteralsWithConstants,Replace String literals with Spring constants,Replace String literals with Spring constants where applicable.,193,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.EnableVirtualThreads,Enable Virtual Threads on Java 21,Set `spring.threads.virtual.enabled` to `true` in `application.properties` or `application.yml`.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceRestTemplateBuilderMethods,Replace deprecated setters in `RestTemplateBuilder`,"Replaces `setConnectTimeout`, `setReadTimeout`, and `setSslBundle` method invocations with `connectTimeout`, `readTimeout`, and `sslBundle` respectively.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_0,Upgrade MyBatis to Spring Boot 2.0,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.0.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_1,Upgrade MyBatis to Spring Boot 2.1,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.1.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_2,Upgrade MyBatis to Spring Boot 2.2,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.2.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -235,6 +218,23 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.Ka maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.RemoveUsingCompletableFuture,Remove `KafkaOperations.usingCompletableFuture()`,Remove the `KafkaOperations.usingCompletableFuture()` bridge during Spring Kafka 2.9 to 3.0 migration.,1,,,,Spring Kafka,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.UpgradeSpringKafka_3_0,Migrate to Spring Kafka 3.0,Migrate applications to the latest Spring Kafka 3.0 release.,17,,,,Spring Kafka,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindApiCalls,Find HTTP API calls via `RestTemplate`,Find outbound HTTP API calls made via Spring's `RestTemplate` class.,1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ApiCalls"",""displayName"":""API endpoints"",""description"":""The API endpoints that applications expose."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the API call.""},{""name"":""method"",""type"":""String"",""displayName"":""Method"",""description"":""The HTTP method of the API endpoint.""},{""name"":""path"",""type"":""String"",""displayName"":""Path"",""description"":""The path of the API endpoint.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ReplaceRestTemplateBuilderMethods,Replace deprecated setters in `RestTemplateBuilder`,"Replaces `setConnectTimeout`, `setReadTimeout`, and `setSslBundle` method invocations with `connectTimeout`, `readTimeout`, and `sslBundle` respectively.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindApiEndpoints,Find Spring API endpoints,"Find all HTTP API endpoints exposed by Spring applications. More specifically, this marks method declarations annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, and `@PatchMapping` as search results.",1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ApiEndpoints"",""displayName"":""API endpoints"",""description"":""The API endpoints that applications expose."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the API endpoint definition.""},{""name"":""methodSignature"",""type"":""String"",""displayName"":""Method Signature"",""description"":""The method signature of the API endpoint.""},{""name"":""methodName"",""type"":""String"",""displayName"":""Method name"",""description"":""The name of the method that defines the API endpoint.""},{""name"":""method"",""type"":""String"",""displayName"":""Method"",""description"":""The HTTP method of the API endpoint.""},{""name"":""path"",""type"":""String"",""displayName"":""Path"",""description"":""The path of the API endpoint.""},{""name"":""leadingAnnotations"",""type"":""String"",""displayName"":""Leading Annotations"",""description"":""The Leading annotations of the API endpoint.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindConfigurationProperties,Find Spring `@ConfigurationProperties`,Find all classes annotated with `@ConfigurationProperties` and extract their prefix values. This is useful for discovering all externalized configuration properties in Spring Boot applications.,1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ConfigurationPropertiesTable"",""displayName"":""Configuration properties"",""description"":""Classes annotated with `@ConfigurationProperties` and their prefix values."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the @ConfigurationProperties annotation.""},{""name"":""classType"",""type"":""String"",""displayName"":""Class type"",""description"":""The fully qualified name of the class annotated with @ConfigurationProperties.""},{""name"":""prefix"",""type"":""String"",""displayName"":""Prefix"",""description"":""The prefix/value attribute of the @ConfigurationProperties annotation.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindSpringComponents,Find Spring components,"Find Spring components, including controllers, services, repositories, return types of `@Bean` annotated methods, etc.",1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.SpringComponents"",""displayName"":""Spring component definitions"",""description"":""Classes defined with a form of a Spring `@Component` stereotype and types returned from `@Bean` annotated methods."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the component definition.""},{""name"":""componentType"",""type"":""String"",""displayName"":""Component type"",""description"":""The type of the component.""}]},{""name"":""org.openrewrite.java.spring.table.SpringComponentRelationships"",""displayName"":""Relationships between Spring components"",""description"":""A table of relationships between Spring components."",""columns"":[{""name"":""sourceFile"",""type"":""String"",""displayName"":""Defined in source file"",""description"":""The source file that provides evidence of the relationship between dependant and dependency.""},{""name"":""dependantType"",""type"":""String"",""displayName"":""Dependant type"",""description"":""The type of the component requiring a collaborator.""},{""name"":""dependencyType"",""type"":""String"",""displayName"":""Dependency type"",""description"":""The type of the component that is being injected.""}]}]" diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java index 2cf8a6e66..f9aa28979 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateDatadogToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateDatadogToOpenTelemetry") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java index 51bdcade3..32e525136 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateOpenTracingToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateOpenTracingToOpenTelemetry") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java index 79f56831f..435d65874 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateSleuthAnnotationsToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateSleuthAnnotationsToOpenTelemetry") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java index d80a65746..2b5c27c3f 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java @@ -27,7 +27,7 @@ class MigrateSleuthToMicrometerTracingTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.boot3.MigrateSleuthApiToMicrometerTracing") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( From 9b23386722f220da13d3e10a6ec41ecba007c117 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 13:45:09 +0100 Subject: [PATCH 08/17] Restore `ReplaceRestTemplateBuilderMethods` in recipes.csv --- src/main/resources/META-INF/rewrite/recipes.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 23542abac..fb4136078 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -123,6 +123,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot3BestPracticesOnly,Spring Boot 3.3 best practices (only),"Applies best practices to Spring Boot 3 applications, without chaining in upgrades to Spring Boot.",213,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceStringLiteralsWithConstants,Replace String literals with Spring constants,Replace String literals with Spring constants where applicable.,193,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.EnableVirtualThreads,Enable Virtual Threads on Java 21,Set `spring.threads.virtual.enabled` to `true` in `application.properties` or `application.yml`.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceRestTemplateBuilderMethods,Replace deprecated setters in `RestTemplateBuilder`,"Replaces `setConnectTimeout`, `setReadTimeout`, and `setSslBundle` method invocations with `connectTimeout`, `readTimeout`, and `sslBundle` respectively.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_0,Upgrade MyBatis to Spring Boot 2.0,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.0.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_1,Upgrade MyBatis to Spring Boot 2.1,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.1.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_2,Upgrade MyBatis to Spring Boot 2.2,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.2.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -233,7 +234,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentele maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ReplaceRestTemplateBuilderMethods,Replace deprecated setters in `RestTemplateBuilder`,"Replaces `setConnectTimeout`, `setReadTimeout`, and `setSslBundle` method invocations with `connectTimeout`, `readTimeout`, and `sslBundle` respectively.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindApiEndpoints,Find Spring API endpoints,"Find all HTTP API endpoints exposed by Spring applications. More specifically, this marks method declarations annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, and `@PatchMapping` as search results.",1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ApiEndpoints"",""displayName"":""API endpoints"",""description"":""The API endpoints that applications expose."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the API endpoint definition.""},{""name"":""methodSignature"",""type"":""String"",""displayName"":""Method Signature"",""description"":""The method signature of the API endpoint.""},{""name"":""methodName"",""type"":""String"",""displayName"":""Method name"",""description"":""The name of the method that defines the API endpoint.""},{""name"":""method"",""type"":""String"",""displayName"":""Method"",""description"":""The HTTP method of the API endpoint.""},{""name"":""path"",""type"":""String"",""displayName"":""Path"",""description"":""The path of the API endpoint.""},{""name"":""leadingAnnotations"",""type"":""String"",""displayName"":""Leading Annotations"",""description"":""The Leading annotations of the API endpoint.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindConfigurationProperties,Find Spring `@ConfigurationProperties`,Find all classes annotated with `@ConfigurationProperties` and extract their prefix values. This is useful for discovering all externalized configuration properties in Spring Boot applications.,1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ConfigurationPropertiesTable"",""displayName"":""Configuration properties"",""description"":""Classes annotated with `@ConfigurationProperties` and their prefix values."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the @ConfigurationProperties annotation.""},{""name"":""classType"",""type"":""String"",""displayName"":""Class type"",""description"":""The fully qualified name of the class annotated with @ConfigurationProperties.""},{""name"":""prefix"",""type"":""String"",""displayName"":""Prefix"",""description"":""The prefix/value attribute of the @ConfigurationProperties annotation.""}]}]" From 960713e61df75ab020a72627dd4ae504c4de112e Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 14:29:56 +0100 Subject: [PATCH 09/17] Minimize modifiers in tests --- .../resources/META-INF/rewrite/recipes.csv | 50 ++++++++++++------ .../MigrateDatadogToOpenTelemetryTest.java | 52 +++++++++---------- ...MigrateOpenTracingToOpenTelemetryTest.java | 44 ++++++++-------- ...eSleuthAnnotationsToOpenTelemetryTest.java | 16 +++--- .../MigrateSleuthToMicrometerTracingTest.java | 40 +++++++------- 5 files changed, 109 insertions(+), 93 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index fb4136078..e5c9a3611 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -98,7 +98,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2263,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -106,6 +106,22 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.se `spring-webmvc` or `spring-webflux` projects that parse the error response JSON may need to deal with the missing item ([release notes](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes#messages-in-the-default-error-view)). You can still use the `server.error.include-message` property if you want messages to be included.",5,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddRouteTrailingSlash,Add trailing slash to Spring routes,"This is part of Spring MVC and WebFlux URL Matching Changes, as of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, a controller `@GetMapping(""/some/greeting"")` would match both `GET /some/greeting` and `GET /some/greeting/`, but it doesn't match `GET /some/greeting/` anymore by default and will result in an HTTP 404 error. This recipe is to add declaration of additional route explicitly on the controller handler (like `@GetMapping(""/some/greeting"", ""/some/greeting/"")`.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddSetUseTrailingSlashMatch,Add `SetUseTrailingSlashMatch()` in configuration,"This is part of Spring MVC and WebFlux URL Matching Changes, as of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, a controller `@GetMapping(""/some/greeting"")` would match both `GET /some/greeting` and `GET /some/greeting/`, but it doesn't match `GET /some/greeting/` anymore by default and will result in an HTTP 404 error. This recipe is change the default with the global Spring MVC or Webflux configuration.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddValidToNestedConfigProperties,Add `@Valid` to nested properties in `@ConfigurationProperties`,Adds `@Valid` annotation to fields in `@ConfigurationProperties` classes that contain nested properties with validation constraints.,1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -219,22 +235,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.Ka maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.RemoveUsingCompletableFuture,Remove `KafkaOperations.usingCompletableFuture()`,Remove the `KafkaOperations.usingCompletableFuture()` bridge during Spring Kafka 2.9 to 3.0 migration.,1,,,,Spring Kafka,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.kafka.UpgradeSpringKafka_3_0,Migrate to Spring Kafka 3.0,Migrate applications to the latest Spring Kafka 3.0 release.,17,,,,Spring Kafka,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindApiCalls,Find HTTP API calls via `RestTemplate`,Find outbound HTTP API calls made via Spring's `RestTemplate` class.,1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ApiCalls"",""displayName"":""API endpoints"",""description"":""The API endpoints that applications expose."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the API call.""},{""name"":""method"",""type"":""String"",""displayName"":""Method"",""description"":""The HTTP method of the API endpoint.""},{""name"":""path"",""type"":""String"",""displayName"":""Path"",""description"":""The path of the API endpoint.""}]}]" -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindApiEndpoints,Find Spring API endpoints,"Find all HTTP API endpoints exposed by Spring applications. More specifically, this marks method declarations annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, and `@PatchMapping` as search results.",1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ApiEndpoints"",""displayName"":""API endpoints"",""description"":""The API endpoints that applications expose."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the API endpoint definition.""},{""name"":""methodSignature"",""type"":""String"",""displayName"":""Method Signature"",""description"":""The method signature of the API endpoint.""},{""name"":""methodName"",""type"":""String"",""displayName"":""Method name"",""description"":""The name of the method that defines the API endpoint.""},{""name"":""method"",""type"":""String"",""displayName"":""Method"",""description"":""The HTTP method of the API endpoint.""},{""name"":""path"",""type"":""String"",""displayName"":""Path"",""description"":""The path of the API endpoint.""},{""name"":""leadingAnnotations"",""type"":""String"",""displayName"":""Leading Annotations"",""description"":""The Leading annotations of the API endpoint.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindConfigurationProperties,Find Spring `@ConfigurationProperties`,Find all classes annotated with `@ConfigurationProperties` and extract their prefix values. This is useful for discovering all externalized configuration properties in Spring Boot applications.,1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.ConfigurationPropertiesTable"",""displayName"":""Configuration properties"",""description"":""Classes annotated with `@ConfigurationProperties` and their prefix values."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the @ConfigurationProperties annotation.""},{""name"":""classType"",""type"":""String"",""displayName"":""Class type"",""description"":""The fully qualified name of the class annotated with @ConfigurationProperties.""},{""name"":""prefix"",""type"":""String"",""displayName"":""Prefix"",""description"":""The prefix/value attribute of the @ConfigurationProperties annotation.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.search.FindSpringComponents,Find Spring components,"Find Spring components, including controllers, services, repositories, return types of `@Bean` annotated methods, etc.",1,,,,Search,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.java.spring.table.SpringComponents"",""displayName"":""Spring component definitions"",""description"":""Classes defined with a form of a Spring `@Component` stereotype and types returned from `@Bean` annotated methods."",""columns"":[{""name"":""sourcePath"",""type"":""String"",""displayName"":""Source path"",""description"":""The path to the source file containing the component definition.""},{""name"":""componentType"",""type"":""String"",""displayName"":""Component type"",""description"":""The type of the component.""}]},{""name"":""org.openrewrite.java.spring.table.SpringComponentRelationships"",""displayName"":""Relationships between Spring components"",""description"":""A table of relationships between Spring components."",""columns"":[{""name"":""sourceFile"",""type"":""String"",""displayName"":""Defined in source file"",""description"":""The source file that provides evidence of the relationship between dependant and dependency.""},{""name"":""dependantType"",""type"":""String"",""displayName"":""Dependant type"",""description"":""The type of the component requiring a collaborator.""},{""name"":""dependencyType"",""type"":""String"",""displayName"":""Dependency type"",""description"":""The type of the component that is being injected.""}]}]" @@ -297,6 +297,22 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud202 maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2025.SpringCloudGatewayProxyWebMvcProperties,Migrate Spring Cloud Gateway Proxy WebMvc Properties,Migrate Spring Cloud Gateway Proxy WebMvc properties for Spring Cloud 2025 release.,5,,,,Cloud2025,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.UpgradeSpringSecurity_7_0,Migrate to Spring Security 7.0,"Migrate applications to the latest Spring Security 7.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions.",9,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.SecurityConfigurerRemoveThrowsException,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`.,5,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",23,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,29,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,29,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,9,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",89,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.MigrateToFlyway10,Migrate to Flyway 10,Migrate to Flyway 10. See details at [Flyway V10 has landed](https://documentation.red-gate.com/fd/flyway-v10-has-landed-222627771.html).,25,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModulePostgreSQL,Add missing Flyway module for PostgreSQL,"Database modules for Flyway 10 have been split out in to separate modules for maintainability. Add the `flyway-database-postgresql` dependency if you are using PostgreSQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleMySQL,Add missing Flyway module for MySQL,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-mysql` dependency if you are using MySQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java index f9aa28979..8dfe59214 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateDatadogToOpenTelemetryTest.java @@ -107,15 +107,15 @@ void migrateDatadogTracer() { """ import datadog.trace.api.Tracer; - public class TracingService { - private Tracer tracer; + class TracingService { + Tracer tracer; } """, """ import io.opentelemetry.api.trace.Tracer; - public class TracingService { - private Tracer tracer; + class TracingService { + Tracer tracer; } """ ) @@ -130,15 +130,15 @@ void migrateDatadogSpan() { """ import datadog.trace.api.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """, """ import io.opentelemetry.api.trace.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """ ) @@ -153,15 +153,15 @@ void migrateDatadogSpanContext() { """ import datadog.trace.api.SpanContext; - public class ContextService { - private SpanContext context; + class ContextService { + SpanContext context; } """, """ import io.opentelemetry.api.trace.SpanContext; - public class ContextService { - private SpanContext context; + class ContextService { + SpanContext context; } """ ) @@ -176,15 +176,15 @@ void migrateTraceScope() { """ import datadog.trace.context.TraceScope; - public class ScopedService { - private TraceScope scope; + class ScopedService { + TraceScope scope; } """, """ import io.opentelemetry.context.Scope; - public class ScopedService { - private Scope scope; + class ScopedService { + Scope scope; } """ ) @@ -199,7 +199,7 @@ void migrateTraceAnnotation() { """ import datadog.trace.api.Trace; - public class TracedService { + class TracedService { @Trace public void tracedMethod() { } @@ -208,7 +208,7 @@ public void tracedMethod() { """ import io.opentelemetry.instrumentation.annotations.WithSpan; - public class TracedService { + class TracedService { @WithSpan public void tracedMethod() { } @@ -226,15 +226,15 @@ void migrateDDTracer() { """ import datadog.trace.api.DDTracer; - public class TracerFactory { - private DDTracer tracer; + class TracerFactory { + DDTracer tracer; } """, """ import io.opentelemetry.api.trace.Tracer; - public class TracerFactory { - private Tracer tracer; + class TracerFactory { + Tracer tracer; } """ ) @@ -249,15 +249,15 @@ void migrateDDSpan() { """ import datadog.trace.api.DDSpan; - public class SpanFactory { - private DDSpan span; + class SpanFactory { + DDSpan span; } """, """ import io.opentelemetry.api.trace.Span; - public class SpanFactory { - private Span span; + class SpanFactory { + Span span; } """ ) diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java index 32e525136..d874d4e50 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateOpenTracingToOpenTelemetryTest.java @@ -92,15 +92,15 @@ void migrateTracer() { """ import io.opentracing.Tracer; - public class OpenTracingService { - private Tracer tracer; + class OpenTracingService { + Tracer tracer; } """, """ import io.opentelemetry.api.trace.Tracer; - public class OpenTracingService { - private Tracer tracer; + class OpenTracingService { + Tracer tracer; } """ ) @@ -115,15 +115,15 @@ void migrateSpan() { """ import io.opentracing.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """, """ import io.opentelemetry.api.trace.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """ ) @@ -138,15 +138,15 @@ void migrateSpanContext() { """ import io.opentracing.SpanContext; - public class ContextService { - private SpanContext context; + class ContextService { + SpanContext context; } """, """ import io.opentelemetry.api.trace.SpanContext; - public class ContextService { - private SpanContext context; + class ContextService { + SpanContext context; } """ ) @@ -161,15 +161,15 @@ void migrateScope() { """ import io.opentracing.Scope; - public class ScopedService { - private Scope scope; + class ScopedService { + Scope scope; } """, """ import io.opentelemetry.context.Scope; - public class ScopedService { - private Scope scope; + class ScopedService { + Scope scope; } """ ) @@ -185,18 +185,18 @@ void migratePropagation() { import io.opentracing.propagation.TextMapExtract; import io.opentracing.propagation.TextMapInject; - public class PropagationService { - private TextMapExtract extractor; - private TextMapInject injector; + class PropagationService { + TextMapExtract extractor; + TextMapInject injector; } """, """ import io.opentelemetry.context.propagation.TextMapGetter; import io.opentelemetry.context.propagation.TextMapSetter; - public class PropagationService { - private TextMapGetter extractor; - private TextMapSetter injector; + class PropagationService { + TextMapGetter extractor; + TextMapSetter injector; } """ ) diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java index 435d65874..d1369716f 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java @@ -87,7 +87,7 @@ void migrateNewSpanToWithSpan() { """ import org.springframework.cloud.sleuth.annotation.NewSpan; - public class TracedService { + class TracedService { @NewSpan public void tracedMethod() { } @@ -96,7 +96,7 @@ public void tracedMethod() { """ import io.opentelemetry.instrumentation.annotations.WithSpan; - public class TracedService { + class TracedService { @WithSpan public void tracedMethod() { } @@ -114,7 +114,7 @@ void migrateSpanTagToSpanAttribute() { """ import org.springframework.cloud.sleuth.annotation.SpanTag; - public class TaggedService { + class TaggedService { public void process(@SpanTag String orderId) { } } @@ -122,7 +122,7 @@ public void process(@SpanTag String orderId) { """ import io.opentelemetry.instrumentation.annotations.SpanAttribute; - public class TaggedService { + class TaggedService { public void process(@SpanAttribute String orderId) { } } @@ -139,7 +139,7 @@ void migrateContinueSpanToWithSpan() { """ import org.springframework.cloud.sleuth.annotation.ContinueSpan; - public class ContinuedService { + class ContinuedService { @ContinueSpan public void continueProcessing() { } @@ -148,7 +148,7 @@ public void continueProcessing() { """ import io.opentelemetry.instrumentation.annotations.WithSpan; - public class ContinuedService { + class ContinuedService { @WithSpan public void continueProcessing() { } @@ -167,7 +167,7 @@ void migrateMultipleAnnotations() { import org.springframework.cloud.sleuth.annotation.NewSpan; import org.springframework.cloud.sleuth.annotation.SpanTag; - public class OrderService { + class OrderService { @NewSpan public void createOrder(@SpanTag String customerId) { } @@ -177,7 +177,7 @@ public void createOrder(@SpanTag String customerId) { import io.opentelemetry.instrumentation.annotations.SpanAttribute; import io.opentelemetry.instrumentation.annotations.WithSpan; - public class OrderService { + class OrderService { @WithSpan public void createOrder(@SpanAttribute String customerId) { } diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java index 2b5c27c3f..fda39113c 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java @@ -92,15 +92,15 @@ void migrateTracerImport() { """ import org.springframework.cloud.sleuth.Tracer; - public class TracingService { - private Tracer tracer; + class TracingService { + Tracer tracer; } """, """ import io.micrometer.tracing.Tracer; - public class TracingService { - private Tracer tracer; + class TracingService { + Tracer tracer; } """ ) @@ -115,15 +115,15 @@ void migrateSpanImport() { """ import org.springframework.cloud.sleuth.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """, """ import io.micrometer.tracing.Span; - public class SpanService { - private Span span; + class SpanService { + Span span; } """ ) @@ -139,18 +139,18 @@ void migrateBaggage() { import org.springframework.cloud.sleuth.Baggage; import org.springframework.cloud.sleuth.BaggageInScope; - public class BaggageService { - private Baggage baggage; - private BaggageInScope scope; + class BaggageService { + Baggage baggage; + BaggageInScope scope; } """, """ import io.micrometer.tracing.Baggage; import io.micrometer.tracing.BaggageInScope; - public class BaggageService { - private Baggage baggage; - private BaggageInScope scope; + class BaggageService { + Baggage baggage; + BaggageInScope scope; } """ ) @@ -166,18 +166,18 @@ void migrateCurrentTraceContext() { import org.springframework.cloud.sleuth.CurrentTraceContext; import org.springframework.cloud.sleuth.TraceContext; - public class ContextService { - private CurrentTraceContext currentContext; - private TraceContext traceContext; + class ContextService { + CurrentTraceContext currentContext; + TraceContext traceContext; } """, """ import io.micrometer.tracing.CurrentTraceContext; import io.micrometer.tracing.TraceContext; - public class ContextService { - private CurrentTraceContext currentContext; - private TraceContext traceContext; + class ContextService { + CurrentTraceContext currentContext; + TraceContext traceContext; } """ ) From 400c718ed951632e6b06f7349799743f4c08cd8e Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 15:38:30 +0100 Subject: [PATCH 10/17] Remove duplicate entries from recipes.csv --- src/main/resources/META-INF/rewrite/recipes.csv | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index e5c9a3611..d928294a9 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -106,22 +106,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.se `spring-webmvc` or `spring-webflux` projects that parse the error response JSON may need to deal with the missing item ([release notes](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes#messages-in-the-default-error-view)). You can still use the `server.error.include-message` property if you want messages to be included.",5,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",9,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,11,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",29,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",97,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddRouteTrailingSlash,Add trailing slash to Spring routes,"This is part of Spring MVC and WebFlux URL Matching Changes, as of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, a controller `@GetMapping(""/some/greeting"")` would match both `GET /some/greeting` and `GET /some/greeting/`, but it doesn't match `GET /some/greeting/` anymore by default and will result in an HTTP 404 error. This recipe is to add declaration of additional route explicitly on the controller handler (like `@GetMapping(""/some/greeting"", ""/some/greeting/"")`.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddSetUseTrailingSlashMatch,Add `SetUseTrailingSlashMatch()` in configuration,"This is part of Spring MVC and WebFlux URL Matching Changes, as of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, a controller `@GetMapping(""/some/greeting"")` would match both `GET /some/greeting` and `GET /some/greeting/`, but it doesn't match `GET /some/greeting/` anymore by default and will result in an HTTP 404 error. This recipe is change the default with the global Spring MVC or Webflux configuration.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.AddValidToNestedConfigProperties,Add `@Valid` to nested properties in `@ConfigurationProperties`,Adds `@Valid` annotation to fields in `@ConfigurationProperties` classes that contain nested properties with validation constraints.,1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, From 4f2e19da00eadef3677fa1558564fe9fd0f8b068 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 15:38:39 +0100 Subject: [PATCH 11/17] Use wildcard --- .../resources/META-INF/rewrite/opentelemetry.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 645414edc..f2c3b03f1 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -68,19 +68,7 @@ recipeList: artifactId: spring-cloud-starter-sleuth - org.openrewrite.java.dependencies.RemoveDependency: groupId: org.springframework.cloud - artifactId: spring-cloud-sleuth-api - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: org.springframework.cloud - artifactId: spring-cloud-sleuth-otel - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: org.springframework.cloud - artifactId: spring-cloud-sleuth-otel-autoconfigure - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: org.springframework.cloud - artifactId: spring-cloud-sleuth-zipkin - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: org.springframework.cloud - artifactId: spring-cloud-sleuth-brave + artifactId: spring-cloud-sleuth* # Add Micrometer Tracing with OpenTelemetry - org.openrewrite.java.dependencies.AddDependency: groupId: io.micrometer From 228db0e956ecc87a2b9b8f269c574b5d8ad31465 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 8 Jan 2026 16:05:17 +0100 Subject: [PATCH 12/17] Inline small recipes only used once --- .../META-INF/rewrite/opentelemetry.yml | 65 ++++++------------- .../resources/META-INF/rewrite/recipes.csv | 5 +- 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index f2c3b03f1..197b3e83e 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -132,25 +132,6 @@ recipeList: onlyIfUsing: io.opentelemetry.* acceptTransitive: true ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging -displayName: Add OpenTelemetry Logback instrumentation -description: >- - Add OpenTelemetry Logback appender for automatic log correlation with traces. - This enables trace context (trace ID and span ID) to be automatically added to log entries. -tags: - - spring - - boot - - opentelemetry - - logging -recipeList: - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-logback-appender-1.0 - onlyIfUsing: ch.qos.logback.* - acceptTransitive: true - --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry @@ -210,17 +191,32 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot -displayName: Configure OpenTelemetry for Spring Boot +name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup +displayName: Complete OpenTelemetry setup for Spring Boot description: >- - Add basic OpenTelemetry configuration properties for Spring Boot applications. - This sets up OTLP exporter with a default localhost endpoint. + Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, + OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add + observability to Spring Boot applications using OpenTelemetry. tags: - spring - boot - opentelemetry - - configuration + - observability + - tracing + - logging recipeList: + - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-exporter-otlp + onlyIfUsing: io.opentelemetry.* + acceptTransitive: true + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-logback-appender-1.0 + onlyIfUsing: ch.qos.logback.* + acceptTransitive: true + # Enable tracing - org.openrewrite.java.spring.AddSpringProperty: property: management.tracing.enabled @@ -234,27 +230,6 @@ recipeList: property: management.otlp.tracing.endpoint value: http://localhost:4318/v1/traces ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup -displayName: Complete OpenTelemetry setup for Spring Boot -description: >- - Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, - OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add - observability to Spring Boot applications using OpenTelemetry. -tags: - - spring - - boot - - opentelemetry - - observability - - tracing - - logging -recipeList: - - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation - - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter - - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging - - org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot - --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index d928294a9..4d1b1e9ba 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -98,7 +98,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Sp maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2263,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -283,11 +283,8 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.SecurityConfigurerRemoveThrowsException,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`.,5,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter,Add OpenTelemetry OTLP exporter,"Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector).",3,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryLogging,Add OpenTelemetry Logback instrumentation,Add OpenTelemetry Logback appender for automatic log correlation with traces. This enables trace context (trace ID and span ID) to be automatically added to log entries.,3,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.ConfigureOpenTelemetryForSpringBoot,Configure OpenTelemetry for Spring Boot,Add basic OpenTelemetry configuration properties for Spring Boot applications. This sets up OTLP exporter with a default localhost endpoint.,7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",23,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, From cf22ecfdcf6f3d2a7b3e4302b28922c3be58be56 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Jan 2026 12:47:12 +0100 Subject: [PATCH 13/17] Remove obsolete `AddOpenTelemetryOtlpExporter` --- .../META-INF/rewrite/opentelemetry.yml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 197b3e83e..65ed91af3 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -113,25 +113,6 @@ recipeList: newPackageName: io.micrometer.tracing recursive: true ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryOtlpExporter -displayName: Add OpenTelemetry OTLP exporter -description: >- - Add the OpenTelemetry OTLP exporter dependency for exporting telemetry data to an - OpenTelemetry-compatible backend (such as Jaeger, Zipkin, or any OTLP-compatible collector). -tags: - - spring - - boot - - opentelemetry - - otlp -recipeList: - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry - artifactId: opentelemetry-exporter-otlp - onlyIfUsing: io.opentelemetry.* - acceptTransitive: true - --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry From f32cdb22184b8e4ffd27123e8f12fcb2bc75645e Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Jan 2026 12:48:13 +0100 Subject: [PATCH 14/17] Remove unused `UpgradeOpenTelemetry_2_23` --- .../META-INF/rewrite/opentelemetry.yml | 21 ------------------- .../resources/META-INF/rewrite/recipes.csv | 1 - 2 files changed, 22 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 65ed91af3..2c8b26d22 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -149,27 +149,6 @@ recipeList: # Note: The user will need to manually update their collector configuration # to accept OTLP instead of Zipkin format ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23 -displayName: Upgrade to OpenTelemetry Java Instrumentation 2.23.0 -description: >- - Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. - This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4. -tags: - - spring - - boot - - opentelemetry -recipeList: - - org.openrewrite.java.dependencies.UpgradeDependencyVersion: - groupId: io.opentelemetry.instrumentation - artifactId: "*" - newVersion: 2.23.0 - - org.openrewrite.java.dependencies.UpgradeDependencyVersion: - groupId: io.opentelemetry - artifactId: "*" - newVersion: 1.57.0 - --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 4d1b1e9ba..2c78b31f7 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -284,7 +284,6 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.UpgradeOpenTelemetry_2_23,Upgrade to OpenTelemetry Java Instrumentation 2.23.0,Upgrade OpenTelemetry Java Instrumentation dependencies to version 2.23.0. This version targets OpenTelemetry SDK 1.57.0 and includes support for Spring Boot 4.,5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",23,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, From b191d172dd53660834e3a1aa4724609dbe10cff1 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Jan 2026 13:22:34 +0100 Subject: [PATCH 15/17] Restructure recipes top down --- .../META-INF/rewrite/opentelemetry.yml | 361 ++++++------------ .../resources/META-INF/rewrite/recipes.csv | 53 ++- 2 files changed, 132 insertions(+), 282 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 2c8b26d22..8ef8b966b 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -16,38 +16,29 @@ --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation -displayName: Add OpenTelemetry Spring Boot auto instrumentation +name: org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetry +displayName: Complete migration to OpenTelemetry description: >- - Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for - automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with - OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for - Spring Boot native image applications. + Comprehensive migration to OpenTelemetry including dependencies, configuration properties, + and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, + and OpenTracing to OpenTelemetry. tags: - spring - boot - opentelemetry + - migration - observability - - tracing recipeList: - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-instrumentation-bom - version: 2.x - scope: import - type: pom - onlyIfUsing: org.springframework.boot.* - acceptTransitive: true - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-spring-boot-starter - version: 2.x - onlyIfUsing: org.springframework.boot.* - acceptTransitive: true + - org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry + - org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry --- type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth +name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry displayName: Migrate from Spring Cloud Sleuth to OpenTelemetry description: >- Migrate from Spring Cloud Sleuth to OpenTelemetry. @@ -73,14 +64,44 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.micrometer artifactId: micrometer-tracing-bridge-otel - onlyIfUsing: org.springframework.boot.* + onlyIfUsing: org.springframework.cloud.sleuth.* acceptTransitive: true # Add OpenTelemetry exporters for common backends - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry artifactId: opentelemetry-exporter-otlp + onlyIfUsing: org.springframework.cloud.sleuth.* + acceptTransitive: true + + # Add OpenTelemetry Spring Boot Starter for auto-instrumentation + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-bom + version: 2.x + scope: import + type: pom + onlyIfUsing: org.springframework.boot.* + acceptTransitive: true + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-spring-boot-starter + version: 2.x onlyIfUsing: org.springframework.boot.* acceptTransitive: true + + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: org.springframework.cloud.sleuth.* + acceptTransitive: true + # Add Spring Boot AOP starter for annotation processing + - org.openrewrite.java.dependencies.AddDependency: + groupId: org.springframework.boot + artifactId: spring-boot-starter-aop + onlyIfUsing: io.opentelemetry.instrumentation.annotations.* + acceptTransitive: true + # Migrate Sleuth properties to OpenTelemetry/Micrometer properties - org.openrewrite.java.spring.ChangeSpringPropertyKey: oldPropertyKey: spring.sleuth.enabled @@ -107,6 +128,27 @@ recipeList: propertyKey: spring.sleuth.otel.config.trace-id-ratio-based - org.openrewrite.java.spring.DeleteSpringProperty: propertyKey: spring.sleuth.otel.resource.enabled + + # API migration to Micrometer Tracing types + # Migrate renamed exporter type before change package + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanFilter + newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanExportingPredicate + + # Annotation migration to OpenTelemetry annotations + # @NewSpan -> @WithSpan + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.NewSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # @SpanTag -> @SpanAttribute + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.SpanTag + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.SpanAttribute + # @ContinueSpan -> @WithSpan (note: semantics differ slightly) + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.ContinueSpan + newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan + # Change Sleuth API imports to Micrometer Tracing - org.openrewrite.java.ChangePackage: oldPackageName: org.springframework.cloud.sleuth @@ -130,16 +172,7 @@ recipeList: # Remove Zipkin dependencies - org.openrewrite.java.dependencies.RemoveDependency: groupId: io.zipkin.reporter2 - artifactId: zipkin-reporter-brave - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.reporter2 - artifactId: zipkin-sender-urlconnection - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.reporter2 - artifactId: zipkin-sender-okhttp3 - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.reporter2 - artifactId: zipkin-sender-kafka + artifactId: "*" # Add OpenTelemetry OTLP exporter - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry @@ -148,107 +181,12 @@ recipeList: acceptTransitive: true # Note: The user will need to manually update their collector configuration # to accept OTLP instead of Zipkin format - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup -displayName: Complete OpenTelemetry setup for Spring Boot -description: >- - Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, - OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add - observability to Spring Boot applications using OpenTelemetry. -tags: - - spring - - boot - - opentelemetry - - observability - - tracing - - logging -recipeList: - - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry - artifactId: opentelemetry-exporter-otlp - onlyIfUsing: io.opentelemetry.* - acceptTransitive: true - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-logback-appender-1.0 onlyIfUsing: ch.qos.logback.* acceptTransitive: true - # Enable tracing - - org.openrewrite.java.spring.AddSpringProperty: - property: management.tracing.enabled - value: "true" - # Set sampling probability to 100% for development (adjust for production) - - org.openrewrite.java.spring.AddSpringProperty: - property: management.tracing.sampling.probability - value: "1.0" - # Default OTLP endpoint (localhost collector) - - org.openrewrite.java.spring.AddSpringProperty: - property: management.otlp.tracing.endpoint - value: http://localhost:4318/v1/traces - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing -displayName: Migrate Spring Cloud Sleuth API to Micrometer Tracing API -description: >- - Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. - This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer. -tags: - - spring - - boot - - opentelemetry - - sleuth - - micrometer - - tracing -recipeList: - # Core types migration - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Tracer - newFullyQualifiedTypeName: io.micrometer.tracing.Tracer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span - newFullyQualifiedTypeName: io.micrometer.tracing.Span - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Span$Kind - newFullyQualifiedTypeName: io.micrometer.tracing.Span$Kind - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanCustomizer - newFullyQualifiedTypeName: io.micrometer.tracing.SpanCustomizer - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.CurrentTraceContext - newFullyQualifiedTypeName: io.micrometer.tracing.CurrentTraceContext - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.TraceContext - newFullyQualifiedTypeName: io.micrometer.tracing.TraceContext - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.ScopedSpan - newFullyQualifiedTypeName: io.micrometer.tracing.ScopedSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.SpanAndScope - newFullyQualifiedTypeName: io.micrometer.tracing.SpanAndScope - # Baggage types - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.Baggage - newFullyQualifiedTypeName: io.micrometer.tracing.Baggage - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.BaggageInScope - newFullyQualifiedTypeName: io.micrometer.tracing.BaggageInScope - # Propagation types - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.propagation.Propagator - newFullyQualifiedTypeName: io.micrometer.tracing.propagation.Propagator - # Exporter types - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanFilter - newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanExportingPredicate - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.exporter.SpanReporter - newFullyQualifiedTypeName: io.micrometer.tracing.exporter.SpanReporter - --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry @@ -264,6 +202,16 @@ tags: - zipkin - migration recipeList: + # Remove Brave dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.zipkin.brave + artifactId: "*" + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-api + onlyIfUsing: brave.* + acceptTransitive: true + # Migrate Brave Tracer to OpenTelemetry Tracer - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: brave.Tracer @@ -286,16 +234,6 @@ recipeList: - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: brave.baggage.BaggageField newFullyQualifiedTypeName: io.opentelemetry.api.baggage.Baggage - # Remove Brave specific dependencies - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.brave - artifactId: brave - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.brave - artifactId: brave-instrumentation-http - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.zipkin.brave - artifactId: brave-context-slf4j --- type: specs.openrewrite.org/v1beta/recipe @@ -311,6 +249,20 @@ tags: - opentracing - migration recipeList: + # Remove OpenTracing dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing + artifactId: "*" + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: io.opentracing.contrib + artifactId: "*" + # Add OpenTelemetry API dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry + artifactId: opentelemetry-api + onlyIfUsing: io.opentelemetry.api.* + acceptTransitive: true + # Core types - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: io.opentracing.Tracer @@ -342,51 +294,6 @@ recipeList: oldPackageName: io.opentracing.contrib newPackageName: io.opentelemetry.instrumentation recursive: true - # Remove OpenTracing dependencies - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.opentracing - artifactId: opentracing-api - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.opentracing - artifactId: opentracing-util - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.opentracing - artifactId: opentracing-noop - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: io.opentracing.contrib - artifactId: "*" - # Add OpenTelemetry API dependency - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry - artifactId: opentelemetry-api - onlyIfUsing: io.opentelemetry.api.* - acceptTransitive: true - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport -displayName: Add OpenTelemetry @WithSpan annotation support -description: >- - Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable - @WithSpan and @SpanAttribute annotations for custom span creation. -tags: - - spring - - boot - - opentelemetry - - annotations -recipeList: - # Add OpenTelemetry annotations dependency - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-instrumentation-annotations - onlyIfUsing: org.springframework.boot.* - acceptTransitive: true - # Add Spring Boot AOP starter for annotation processing - - org.openrewrite.java.dependencies.AddDependency: - groupId: org.springframework.boot - artifactId: spring-boot-starter-aop - onlyIfUsing: io.opentelemetry.instrumentation.annotations.* - acceptTransitive: true --- type: specs.openrewrite.org/v1beta/recipe @@ -402,6 +309,13 @@ tags: - newrelic - migration recipeList: + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: com.newrelic.api.agent.* + acceptTransitive: true + # Change @Trace annotation to @WithSpan - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: com.newrelic.api.agent.Trace @@ -409,12 +323,6 @@ recipeList: - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: com.newrelic.api.agent.NewRelic newFullyQualifiedTypeName: io.opentelemetry.api.GlobalOpenTelemetry - # Add OpenTelemetry annotations dependency - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-instrumentation-annotations - onlyIfUsing: io.opentelemetry.instrumentation.annotations.* - acceptTransitive: true --- type: specs.openrewrite.org/v1beta/recipe @@ -430,6 +338,17 @@ tags: - datadog - migration recipeList: + # Remove Datadog dependencies + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: com.datadoghq + artifactId: dd-trace-api + # Add OpenTelemetry annotations dependency + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-instrumentation-annotations + onlyIfUsing: datadog.trace.api.* + acceptTransitive: true + # Datadog core tracing types to OpenTelemetry - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: datadog.trace.api.Tracer @@ -471,67 +390,3 @@ recipeList: - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: datadog.trace.api.Trace newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan - # Remove Datadog dependencies - - org.openrewrite.java.dependencies.RemoveDependency: - groupId: com.datadoghq - artifactId: dd-trace-api - # Add OpenTelemetry annotations dependency - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-instrumentation-annotations - onlyIfUsing: io.opentelemetry.instrumentation.annotations.* - acceptTransitive: true - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry -displayName: Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan -description: >- - Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to - OpenTelemetry @WithSpan annotations. -tags: - - spring - - boot - - opentelemetry - - sleuth - - annotations -recipeList: - # @NewSpan -> @WithSpan - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.NewSpan - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan - # @SpanTag -> @SpanAttribute - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.SpanTag - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.SpanAttribute - # @ContinueSpan -> @WithSpan (note: semantics differ slightly) - - org.openrewrite.java.ChangeType: - oldFullyQualifiedTypeName: org.springframework.cloud.sleuth.annotation.ContinueSpan - newFullyQualifiedTypeName: io.opentelemetry.instrumentation.annotations.WithSpan - # Add OpenTelemetry annotations dependency - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-instrumentation-annotations - onlyIfUsing: io.opentelemetry.instrumentation.annotations.* - acceptTransitive: true - ---- -type: specs.openrewrite.org/v1beta/recipe -name: org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration -displayName: Complete migration to OpenTelemetry -description: >- - Comprehensive migration to OpenTelemetry including dependencies, configuration properties, - and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, - and OpenTracing to OpenTelemetry. -tags: - - spring - - boot - - opentelemetry - - migration - - observability -recipeList: - - org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth - - org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing - - org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry - - org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation - - org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 2c78b31f7..632b7797c 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -93,12 +93,12 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.Up maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.DatabaseComponentAndBeanInitializationOrdering,Adds `@DependsOnDatabaseInitialization` to Spring Beans and Components depending on `javax.sql.DataSource`,"Beans of certain well-known types, such as `JdbcTemplate`, will be ordered so that they are initialized after the database has been initialized. If you have a bean that works with the `DataSource` directly, annotate its class or `@Bean` method with `@DependsOnDatabaseInitialization` to ensure that it too is initialized after the database has been initialized. See the [release notes](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes#initialization-ordering) for more.",5,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.MigrateDatabaseCredentials,Migrate flyway and liquibase credentials,"If you currently define a `spring.flyway.url` or `spring.liquibase.url` you may need to provide additional username and password properties. In earlier versions of Spring Boot, these settings were derived from `spring.datasource` properties but this turned out to be problematic for people that provided their own `DataSource` beans.",9,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.SpringBootProperties_2_6,Migrate Spring Boot properties to 2.6,Migrate properties found in `application.properties` and `application.yml`.,57,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_6,Migrate to Spring Boot 2.6,"Migrate applications to the latest Spring Boot 2.6 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 2.6.",2159,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_6,Migrate to Spring Boot 2.6,"Migrate applications to the latest Spring Boot 2.6 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 2.6.",2161,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.SpringBootProperties_2_7,Migrate Spring Boot properties to 2.7,Migrate properties found in `application.properties` and `application.yml`.,25,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2263,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7,Migrate to Spring Boot 2.7,Upgrade to Spring Boot 2.7.,2265,,,,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.CustomizingJooqDefaultConfiguration,In Spring Boot 2.5 a `DefaultConfigurationCustomizer` can now be used in favour of defining one or more `*Provider` beans,"To streamline the customization of jOOQ’s `DefaultConfiguration`, a bean that implements `DefaultConfigurationCustomizer` can now be defined. This customizer callback should be used in favour of defining one or more `*Provider` beans, the support for which has now been deprecated. See [Spring Boot 2.5 jOOQ customization](https://docs.spring.io/spring-boot/docs/2.5.x/reference/htmlsingle/#features.sql.jooq.customizing).",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.IntegrationSchedulerPoolRecipe,Integration scheduler pool size,"Spring Integration now reuses an available `TaskScheduler` rather than configuring its own. In a typical application setup relying on the auto-configuration, this means that Spring Integration uses the auto-configured task scheduler that has a pool size of 1. To restore Spring Integration’s default of 10 threads, use the `spring.task.scheduling.pool.size` property.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.LoggingShutdownHooks,Applications using logging shutdown hooks,"Spring Boot registers a logging shutdown hook by default for JAR-based applications to ensure that logging resources are released when the JVM exits. If your application is deployed as a WAR then the shutdown hook is not registered since the servlet container usually handles logging concerns. Most applications will want the shutdown hook. However, if your application has complex context hierarchies, then you may need to disable it. You can use the `logging.register-shutdown-hook` property to do that.",1,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot2.search.FindUpgradeRequirementsSpringBoot_2_5,Find patterns that require updating for Spring Boot 2.5,Looks for a series of patterns that have not yet had auto-remediation recipes developed for.,11,,,Search,Spring Boot 2.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -119,7 +119,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Re maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceRestTemplateBuilderRequestFactoryMethod,Replace `RestTemplateBuilder.requestFactory(Function)` with `requestFactoryBuilder`,"`RestTemplateBuilder.requestFactory(java.util.function.Function)` was deprecated since Spring Boot 3.4, in favor of `requestFactoryBuilder(ClientHttpRequestFactoryBuilder)`.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MaintainTrailingSlashURLMappings,Maintain trailing slash URL mappings,"This is part of Spring MVC and WebFlux URL Matching Changes, as of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, a controller `@GetMapping(""/some/greeting"")` would match both `GET /some/greeting` and `GET /some/greeting/`, but it doesn't match `GET /some/greeting/` anymore by default and will result in an HTTP 404 error. This recipe is to maintain trailing slash in all HTTP url mappings.",1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateHooksToReactorContextProperty,Use `spring.reactor.context-propagation` property,Replace `Hooks.enableAutomaticContextPropagation()` with `spring.reactor.context-propagation=true`.,1,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot33BestPractices,Spring Boot 3.3 best practices,Applies best practices to Spring Boot 3 applications.,7653,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot33BestPractices,Spring Boot 3.3 best practices,Applies best practices to Spring Boot 3 applications.,7665,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBoot3BestPracticesOnly,Spring Boot 3.3 best practices (only),"Applies best practices to Spring Boot 3 applications, without chaining in upgrades to Spring Boot.",213,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ReplaceStringLiteralsWithConstants,Replace String literals with Spring constants,Replace String literals with Spring constants where applicable.,193,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.EnableVirtualThreads,Enable Virtual Threads on Java 21,Set `spring.threads.virtual.enabled` to `true` in `application.properties` or `application.yml`.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -133,7 +133,7 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Up maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_6,Upgrade MyBatis to Spring Boot 2.6,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.6.,27,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_2_7,Upgrade MyBatis to Spring Boot 2.7,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 2.7.,31,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_0,Migrate Spring Boot properties to 3.0,Migrate properties found in `application.properties` and `application.yml`.,567,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0,Migrate to Spring Boot 3.0,"Migrate applications to the latest Spring Boot 3.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 2.7.",5777,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0,Migrate to Spring Boot 3.0,"Migrate applications to the latest Spring Boot 3.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 2.7.",5783,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ActuatorEndpointSanitization,Remove the deprecated properties `additional-keys-to-sanitize` from the `configprops` and `env` end points,Spring Boot 3.0 removed the key-based sanitization mechanism used in Spring Boot 2.x in favor of a unified approach. See https://github.com/openrewrite/rewrite-spring/issues/228.,5,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateMaxHttpHeaderSize,Rename `server.max-http-header-size` to `server.max-http-request-header-size`,"Previously, the server.max-http-header-size was treated inconsistently across the four supported embedded web servers. When using Jetty, Netty, or Undertow it would configure the max HTTP request header size. When using Tomcat it would configure the max HTTP request and response header sizes. The renamed property is used to configure the http request header size in Spring Boot 3.0. **To limit the max header size of an HTTP response on Tomcat or Jetty (the only two servers that support such a setting), use a `WebServerFactoryCustomizer`**.",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateThymeleafDependencies,Migrate thymeleaf dependencies to Spring Boot 3.x,"Migrate thymeleaf dependencies to the new artifactId, since these are changed with Spring Boot 3.",7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -141,19 +141,19 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.Mi maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.MigrateSapCfJavaLoggingSupport,Migrate SAP cloud foundry logging support to Spring Boot 3.x,"Migrate SAP cloud foundry logging support from `cf-java-logging-support-servlet` to `cf-java-logging-support-servlet-jakarta`, to use Jakarta with Spring Boot 3.",3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_3_0,Upgrade MyBatis to Spring Boot 3.0,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 3.0.,35,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_1,Migrate Spring Boot properties to 3.1,Migrate properties found in `application.properties` and `application.yml`.,13,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_1,Migrate to Spring Boot 3.1,"Migrate applications to the latest Spring Boot 3.1 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.0.",6213,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_1,Migrate to Spring Boot 3.1,"Migrate applications to the latest Spring Boot 3.1 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.0.",6221,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_2,Migrate Spring Boot properties to 3.2,Migrate properties found in `application.properties` and `application.yml`.,49,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_2,Migrate to Spring Boot 3.2,"Migrate applications to the latest Spring Boot 3.2 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.1.",7243,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_2,Migrate to Spring Boot 3.2,"Migrate applications to the latest Spring Boot 3.2 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.1.",7253,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.RelocateLauncherClasses,Relocate Launcher Classes,Relocate classes that have been moved to different packages in Spring Boot 3.2.,7,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeMyBatisToSpringBoot_3_2,Upgrade MyBatis to Spring Boot 3.2,Upgrade MyBatis Spring modules to a version corresponding to Spring Boot 3.2.,39,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_3,Migrate Spring Boot properties to 3.3,Migrate properties found in `application.properties` and `application.yml`.,13,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_3,Migrate to Spring Boot 3.3,"Migrate applications to the latest Spring Boot 3.3 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.2.",7651,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_3,Migrate to Spring Boot 3.3,"Migrate applications to the latest Spring Boot 3.3 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 3.2.",7663,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.ChangeCassandraGroupId,Change `com.datastax.oss` to `org.apache.cassandra`,Change `groupId` from `com.datastax.oss` to `org.apache.cassandra` and adopt the Spring Boot 3.3 managed version.,19,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_4,Migrate Spring Boot properties to 3.4,Migrate properties found in `application.properties` and `application.yml`.,173,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_4_EnabledToAccess,Migrate Enabled to Access Spring Boot Properties,"Migrate properties found in `application.properties` and `application.yml`, specifically converting 'enabled' to 'access'.",157,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_4,Migrate to Spring Boot 3.4,"Migrate applications to the latest Spring Boot 3.4 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",8649,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_4,Migrate to Spring Boot 3.4,"Migrate applications to the latest Spring Boot 3.4 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",8663,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.SpringBootProperties_3_5,Migrate Spring Boot properties to 3.5,Migrate properties found in `application.properties` and `application.yml`.,59,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5,Migrate to Spring Boot 3.5,"Migrate applications to the latest Spring Boot 3.5 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",8797,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5,Migrate to Spring Boot 3.5,"Migrate applications to the latest Spring Boot 3.5 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",8811,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot3.UpdatePrometheusPushgateway,Update Prometheus Pushgateway Dependency Coordinates,Update the Prometheus Pushgateway artifact ID for Spring Boot 3.5 compatibility.,3,,,,Spring Boot 3.x,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2022.MigrateRequestMappingOnFeignClient,Migrate `@RequestMapping` on `FeignClient` to `@FeignClient` path attribute,Support for `@RequestMapping` over a `FeignClient` interface was removed in Spring Cloud OpenFeign 2.2.10.RELEASE.,1,,,,Spring Cloud 2022,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2022.AddLoggingPatternLevelForSleuth,Add logging.pattern.level for traceId and spanId,"Add `logging.pattern.level` for traceId and spanId which was previously set by default, if not already set.",1,,,,Spring Cloud 2022,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -266,7 +266,7 @@ Note: Higher-level starters (like data-jpa) include lower-level ones (like jdbc) maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot4.MigrateAutoconfigurePackages,Migrate packages to modular starters,Migrate to new packages used for autoconfiguration by Spring Boot 4.0 modules.,93,,,,Boot4,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot4.AddSpringBootStarterFlyway,Add `spring-boot-starter-flyway` if using Flyway,Adds the necessary Spring Boot 4.0 Flyway starter for autoconfiguration based on dependency usage.,5,,,,Boot4,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot4.SpringBootProperties_4_0,Migrate Spring Boot properties to 4.0,Migrate properties found in `application.properties` and `application.yml`.,277,,,,Boot4,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0,Migrate to Spring Boot 4.0,"Migrate applications to the latest Spring Boot 4.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",11005,,,,Boot4,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0,Migrate to Spring Boot 4.0,"Migrate applications to the latest Spring Boot 4.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs.",11021,,,,Boot4,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2023.UpgradeSpringCloud_2023,Migrate to Spring Cloud 2023,Migrate applications to the latest Spring Cloud 2023 (Leyton) release.,21,,,,Spring Cloud 2023,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2023.DependencyUpgrades,Upgrade dependencies to Spring Cloud 2023,Upgrade dependencies to Spring Cloud 2023 from prior 2022.x version.,19,,,,Spring Cloud 2023,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2024.UpgradeSpringCloud_2024,Migrate to Spring Cloud 2024,Migrate applications to the latest Spring Cloud 2024 (Moorgate) release.,21,,,,Spring Cloud 2024,Spring,Java,,,,Recipes for migrating to Spring Cloud 2024.,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, @@ -281,31 +281,26 @@ maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud202 maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.cloud2025.SpringCloudGatewayProxyWebMvcProperties,Migrate Spring Cloud Gateway Proxy WebMvc Properties,Migrate Spring Cloud Gateway Proxy WebMvc properties for Spring Cloud 2025 release.,5,,,,Cloud2025,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.UpgradeSpringSecurity_7_0,Migrate to Spring Security 7.0,"Migrate applications to the latest Spring Security 7.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions.",9,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.security7.SecurityConfigurerRemoveThrowsException,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`,Remove throws exception in `SecurityConfigurer` methods `init` and `configure`.,5,,,,Security7,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddOpenTelemetryAutoInstrumentation,Add OpenTelemetry Spring Boot auto instrumentation,"Add [OpenTelemetry Spring Boot Starter](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/) for automatic instrumentation. This is the officially recommended approach for instrumenting Spring Boot applications with OpenTelemetry. The starter provides auto-configuration and works with Spring Boot 2.6+ and 3.1+, including support for Spring Boot native image applications.",5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetryFromSleuth,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,37,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,11,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryFullSetup,Complete OpenTelemetry setup for Spring Boot,"Complete OpenTelemetry setup for Spring Boot applications including auto-instrumentation starter, OTLP exporter, Logback integration, and basic configuration. This is the recommended way to add observability to Spring Boot applications using OpenTelemetry.",23,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing,Migrate Spring Cloud Sleuth API to Micrometer Tracing API,"Migrate Java code using Spring Cloud Sleuth API to Micrometer Tracing API. This recipe handles the migration of Tracer, Span, and related classes from Sleuth to Micrometer.",27,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",21,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,29,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.AddWithSpanAnnotationSupport,Add OpenTelemetry @WithSpan annotation support,Add the OpenTelemetry annotations dependency and Spring Boot AOP dependency to enable @WithSpan and @SpanAttribute annotations for custom span creation.,5,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateToOpenTelemetry,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",139,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry,Migrate from Spring Cloud Sleuth to OpenTelemetry. [Spring Cloud Sleuth has been deprecated](https://github.com/spring-cloud/spring-cloud-sleuth#spring-cloud-sleuth) and is replaced by Micrometer Tracing with OpenTelemetry as a backend. This recipe removes Sleuth dependencies and adds OpenTelemetry instrumentation.,45,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateFromZipkinToOpenTelemetry,Migrate from Zipkin to OpenTelemetry OTLP,Migrate from Zipkin tracing to OpenTelemetry OTLP. This recipe replaces Zipkin dependencies with OpenTelemetry OTLP exporter and updates the related configuration properties.,7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateBraveToOpenTelemetry,Migrate Brave API to OpenTelemetry API,"Migrate Java code using Brave (Zipkin) tracing API to OpenTelemetry API. This recipe handles the migration of Brave Tracer, Span, and related classes to OpenTelemetry equivalents.",19,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateOpenTracingToOpenTelemetry,Migrate OpenTracing API to OpenTelemetry API,Migrate Java code using OpenTracing API to OpenTelemetry API. OpenTracing has been superseded by OpenTelemetry and is no longer actively maintained.,25,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry,Migrate New Relic Agent to OpenTelemetry,Migrate from New Relic Java Agent annotations to OpenTelemetry annotations. Replace @Trace annotations with @WithSpan annotations.,7,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry,Migrate Datadog tracing to OpenTelemetry,Migrate from Datadog Java tracing annotations to OpenTelemetry annotations. Replace Datadog @Trace annotations with @WithSpan annotations.,29,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry,Migrate Sleuth @NewSpan to OpenTelemetry @WithSpan,Migrate Spring Cloud Sleuth @NewSpan and @ContinueSpan annotations to OpenTelemetry @WithSpan annotations.,9,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.spring.opentelemetry.OpenTelemetryCompleteMigration,Complete migration to OpenTelemetry,"Comprehensive migration to OpenTelemetry including dependencies, configuration properties, and Java code changes. This recipe handles migration from Spring Cloud Sleuth, Brave/Zipkin, and OpenTracing to OpenTelemetry.",89,,,,Opentelemetry,Spring,Java,,,,,Recipes for upgrading and patching [Spring](https://spring.io/) applications.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.MigrateToFlyway10,Migrate to Flyway 10,Migrate to Flyway 10. See details at [Flyway V10 has landed](https://documentation.red-gate.com/fd/flyway-v10-has-landed-222627771.html).,25,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModulePostgreSQL,Add missing Flyway module for PostgreSQL,"Database modules for Flyway 10 have been split out in to separate modules for maintainability. Add the `flyway-database-postgresql` dependency if you are using PostgreSQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleMySQL,Add missing Flyway module for MySQL,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-mysql` dependency if you are using MySQL with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleOracle,Add missing Flyway module for Oracle,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-database-oracle` dependency if you are using Oracle with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.flyway.AddFlywayModuleSqlServer,Add missing Flyway module for SQL Server,"Database modules for Flyway 10 have been split out into separate modules for maintainability. Add the `flyway-sqlserver` dependency if you are using SQL Server with Flyway 10, as detailed on https://github.com/flyway/flyway/issues/3780.",5,,,,,Flyway,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.SpringFoxToSpringDoc,Migrate from SpringFox Swagger to SpringDoc and OpenAPI,Migrate from SpringFox Swagger to SpringDoc and OpenAPI.,139,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.SwaggerToSpringDoc,Migrate from Swagger to SpringDoc and OpenAPI,Migrate from Swagger to SpringDoc and OpenAPI.,101,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.SpringFoxToSpringDoc,Migrate from SpringFox Swagger to SpringDoc and OpenAPI,Migrate from SpringFox Swagger to SpringDoc and OpenAPI.,141,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.SwaggerToSpringDoc,Migrate from Swagger to SpringDoc and OpenAPI,Migrate from Swagger to SpringDoc and OpenAPI.,103,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.ReplaceSpringFoxDependencies,Replace SpringFox Dependencies,Replace SpringFox Dependencies.,7,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_3_0,Upgrade to SpringDoc 3.0,Upgrade to SpringDoc v3.0.,167,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_8,Upgrade to SpringDoc 2.8,Upgrade to SpringDoc v2.8.,163,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_6,Upgrade to SpringDoc 2.6,Upgrade to SpringDoc v2.6.,159,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_5,Upgrade to SpringDoc 2.5,Upgrade to SpringDoc v2.5.,155,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_2,Upgrade to SpringDoc 2.2,Upgrade to SpringDoc v2.2.,151,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2,Upgrade to SpringDoc 2.1,"Upgrade to SpringDoc v2.1, as described in the [upgrade guide](https://springdoc.org/#migrating-from-springdoc-v1).",147,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_3_0,Upgrade to SpringDoc 3.0,Upgrade to SpringDoc v3.0.,169,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_8,Upgrade to SpringDoc 2.8,Upgrade to SpringDoc v2.8.,165,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_6,Upgrade to SpringDoc 2.6,Upgrade to SpringDoc v2.6.,161,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_5,Upgrade to SpringDoc 2.5,Upgrade to SpringDoc v2.5.,157,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2_2,Upgrade to SpringDoc 2.2,Upgrade to SpringDoc v2.2.,153,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.UpgradeSpringDoc_2,Upgrade to SpringDoc 2.1,"Upgrade to SpringDoc v2.1, as described in the [upgrade guide](https://springdoc.org/#migrating-from-springdoc-v1).",149,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.java.springdoc.MigrateSpringdocCommon,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common,Migrate from springdoc-openapi-common to springdoc-openapi-starter-common.,7,,,,,Springdoc,Java,,,,,,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-spring,org.openrewrite.maven.spring.UpgradeExplicitSpringBootDependencies,Upgrade Spring dependencies,Upgrades dependencies according to the specified version of spring boot. Spring boot has many direct and transitive dependencies. When a module has an explicit dependency on one of these it may also need to be upgraded to match the version used by spring boot.,1,,,,,Spring,Maven,,,,,,,"[{""name"":""fromVersion"",""type"":""String"",""displayName"":""From Spring version"",""description"":""XRange pattern for spring version used to limit which projects should be updated"",""example"":"" 2.7.+"",""required"":true},{""name"":""toVersion"",""type"":""String"",""displayName"":""To Spring version"",""description"":""Upgrade version of `org.springframework.boot`"",""example"":""3.0.0-M3"",""required"":true}]", From c38944671330724d593e8d17dc608487ef1d1c71 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Jan 2026 13:29:21 +0100 Subject: [PATCH 16/17] Fix test references --- .../MigrateSleuthAnnotationsToOpenTelemetryTest.java | 2 +- ...Test.java => MigrateSleuthApiToMicrometerTracingTest.java} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/test/java/org/openrewrite/java/spring/opentelemetry/{MigrateSleuthToMicrometerTracingTest.java => MigrateSleuthApiToMicrometerTracingTest.java} (97%) diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java index d1369716f..13d04c76d 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthAnnotationsToOpenTelemetryTest.java @@ -27,7 +27,7 @@ class MigrateSleuthAnnotationsToOpenTelemetryTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthAnnotationsToOpenTelemetry") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( diff --git a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthApiToMicrometerTracingTest.java similarity index 97% rename from src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java rename to src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthApiToMicrometerTracingTest.java index fda39113c..42cf33e39 100644 --- a/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthToMicrometerTracingTest.java +++ b/src/test/java/org/openrewrite/java/spring/opentelemetry/MigrateSleuthApiToMicrometerTracingTest.java @@ -23,11 +23,11 @@ import static org.openrewrite.java.Assertions.java; -class MigrateSleuthToMicrometerTracingTest implements RewriteTest { +class MigrateSleuthApiToMicrometerTracingTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthApiToMicrometerTracing") + spec.recipeFromResources("org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry") .parser(JavaParser.fromJavaVersion() //language=java .dependsOn( From 317c72ed193ebfcc781c42b150ffef2e28f7cf97 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Jan 2026 13:42:58 +0100 Subject: [PATCH 17/17] Add versions to added dependencies --- .../META-INF/rewrite/opentelemetry.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/opentelemetry.yml b/src/main/resources/META-INF/rewrite/opentelemetry.yml index 8ef8b966b..a27e9f3f4 100644 --- a/src/main/resources/META-INF/rewrite/opentelemetry.yml +++ b/src/main/resources/META-INF/rewrite/opentelemetry.yml @@ -36,6 +36,12 @@ recipeList: - org.openrewrite.java.spring.opentelemetry.MigrateNewRelicToOpenTelemetry - org.openrewrite.java.spring.opentelemetry.MigrateDatadogToOpenTelemetry + - org.openrewrite.java.dependencies.AddDependency: + groupId: io.opentelemetry.instrumentation + artifactId: opentelemetry-logback-appender-1.0 + onlyIfUsing: ch.qos.logback.* + acceptTransitive: true + --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.spring.opentelemetry.MigrateSleuthToOpenTelemetry @@ -64,12 +70,14 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.micrometer artifactId: micrometer-tracing-bridge-otel + version: 1.x onlyIfUsing: org.springframework.cloud.sleuth.* acceptTransitive: true # Add OpenTelemetry exporters for common backends - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry artifactId: opentelemetry-exporter-otlp + version: 1.x onlyIfUsing: org.springframework.cloud.sleuth.* acceptTransitive: true @@ -93,12 +101,14 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-instrumentation-annotations + version: 2.x onlyIfUsing: org.springframework.cloud.sleuth.* acceptTransitive: true # Add Spring Boot AOP starter for annotation processing - org.openrewrite.java.dependencies.AddDependency: groupId: org.springframework.boot artifactId: spring-boot-starter-aop + version: 3.x onlyIfUsing: io.opentelemetry.instrumentation.annotations.* acceptTransitive: true @@ -181,11 +191,6 @@ recipeList: acceptTransitive: true # Note: The user will need to manually update their collector configuration # to accept OTLP instead of Zipkin format - - org.openrewrite.java.dependencies.AddDependency: - groupId: io.opentelemetry.instrumentation - artifactId: opentelemetry-logback-appender-1.0 - onlyIfUsing: ch.qos.logback.* - acceptTransitive: true --- type: specs.openrewrite.org/v1beta/recipe @@ -209,6 +214,7 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry artifactId: opentelemetry-api + version: 1.x onlyIfUsing: brave.* acceptTransitive: true @@ -260,6 +266,7 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry artifactId: opentelemetry-api + version: 1.x onlyIfUsing: io.opentelemetry.api.* acceptTransitive: true @@ -313,6 +320,7 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-instrumentation-annotations + version: 2.x onlyIfUsing: com.newrelic.api.agent.* acceptTransitive: true @@ -346,6 +354,7 @@ recipeList: - org.openrewrite.java.dependencies.AddDependency: groupId: io.opentelemetry.instrumentation artifactId: opentelemetry-instrumentation-annotations + version: 2.x onlyIfUsing: datadog.trace.api.* acceptTransitive: true