All Products
Search
Document Center

Managed Service for OpenTelemetry:Laporkan data jejak dari aplikasi Java menggunakan OpenTelemetry

Last Updated:Aug 29, 2026

Managed Service for OpenTelemetry mengumpulkan data jejak dari aplikasi Java dan menyediakan topologi aplikasi, jejak, analisis transaksi abnormal dan lambat, serta analisis SQL. Tersedia tiga pendekatan instrumenasi, mulai dari penyiapan agen tanpa kode hingga kontrol penuh melalui SDK.

ApproachEffortWhen to use
OpenTelemetry Java agent (recommended)Minimal — sambungkan JAR, tanpa perubahan kodeSebagian besar aplikasi. Mulai dari sini.
OpenTelemetry SDK for JavaModerate — tulis kode instrumenasiSpan kustom, atribut, atau framework yang tidak didukung
Agent + SDK combinedModerate — agen menangani dasar-dasarnya, SDK menambahkan span kustomCakupan otomatis ditambah instrumenasi kustom terarah

Kode contoh

Kloning atau telusuri proyek contoh sebagai referensi yang berfungsi:

git clone https://github.com/alibabacloud-observability/java-demo.git
cd java-demo/opentelemetry-demo

Metode 1: Instrumen otomatis dengan OpenTelemetry Java agent

OpenTelemetry Java agent disambungkan ke JVM saat startup dan menginstrumenasi ratusan library dan framework tanpa perubahan kode apa pun. Ini merupakan titik awal yang direkomendasikan untuk sebagian besar aplikasi.

Langkah 1: Unduh agen

Unduh file JAR agen terbaru dari GitHub Releases:

# wget
wget -O opentelemetry-javaagent.jar \
  https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar

# atau curl
curl -Lo opentelemetry-javaagent.jar \
  https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar

Langkah 2: Konfigurasikan parameter JVM dan jalankan aplikasi

Tambahkan flag -javaagent sebelum argumen -jar. Pilih salah satu protokol HTTP atau gRPC.

HTTP

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=<your-service-name>,service.version=<your-version>,deployment.environment=<your-env> \
  -Dotel.exporter.otlp.protocol=http/protobuf \
  -Dotel.exporter.otlp.traces.endpoint=<traces-endpoint> \
  -Dotel.exporter.otlp.metrics.endpoint=<metrics-endpoint> \
  -Dotel.logs.exporter=none \
  -jar /path/to/your/app.jar

Ganti placeholder dengan nilai aktual Anda:

PlaceholderDescriptionExample
<your-service-name>Nama yang mengidentifikasi aplikasi Andaorder-service
<your-version>Versi aplikasi1.0.0
<your-env>Lingkungan deploymentproduction
<traces-endpoint>Titik akhir jejak dari bagian Prasyarathttp://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/traces
<metrics-endpoint>Titik akhir metrik dari bagian Prasyarathttp://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/metrics

Contoh:

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=order-service,service.version=1.0.0,deployment.environment=production \
  -Dotel.exporter.otlp.protocol=http/protobuf \
  -Dotel.exporter.otlp.traces.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/traces \
  -Dotel.exporter.otlp.metrics.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/metrics \
  -Dotel.logs.exporter=none \
  -jar /path/to/your/app.jar

gRPC

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=<your-service-name>,service.version=<your-version>,deployment.environment=<your-env> \
  -Dotel.exporter.otlp.protocol=grpc \
  -Dotel.exporter.otlp.headers=Authentication=<token> \
  -Dotel.exporter.otlp.endpoint=<endpoint> \
  -Dotel.logs.exporter=none \
  -jar /path/to/your/app.jar

Ganti placeholder dengan nilai aktual Anda:

PlaceholderDescriptionExample
<token>Token otentikasi dari bagian Prasyaratggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****
<endpoint>Titik akhir gRPC dari bagian Prasyarathttp://tracing-analysis-dc-hz-internal.aliyuncs.com:8090

Contoh:

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=order-service,service.version=1.0.0,deployment.environment=production \
  -Dotel.exporter.otlp.protocol=grpc \
  -Dotel.exporter.otlp.headers=Authentication=ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe**** \
  -Dotel.exporter.otlp.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090 \
  -Dotel.logs.exporter=none \
  -jar /path/to/your/app.jar
Untuk meneruskan data jejak melalui OpenTelemetry Collector, hapus -Dotel.exporter.otlp.headers=Authentication=<token> dan atur <endpoint> ke alamat Collector pada mesin on-premises Anda.

Langkah 3: Verifikasi data jejak

  1. Buka Konsol Managed Service for OpenTelemetry.

  2. Pada halaman Applications, klik nama aplikasi Anda.

  3. Konfirmasi bahwa jejak muncul pada halaman detail aplikasi.

Pemecahan masalah:

  • Jika tidak ada data yang muncul, verifikasi bahwa titik akhir dan token sudah benar.

  • Aktifkan logging debug untuk memeriksa perilaku agen:

      -Dotel.javaagent.debug=true
  • Nonaktifkan sementara agen tanpa menghapusnya dari perintah startup:

      -Dotel.javaagent.enabled=false

Metode 2: Instrumen manual dengan OpenTelemetry SDK for Java

Gunakan OpenTelemetry SDK for Java ketika Anda memerlukan kontrol penuh atas operasi mana yang menghasilkan span, atribut apa yang dibawanya, atau ketika agen otomatis tidak mencakup framework Anda.

Langkah 1: Tambahkan dependensi Maven

Tambahkan berikut ini ke pom.xml Anda:

<dependencies>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-api</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-trace</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-otlp</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-semconv</artifactId>
        <version>1.30.0-alpha</version>
    </dependency>
</dependencies>

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

Langkah 2: Inisialisasi tracer

Buat kelas helper yang mengonfigurasi eksporter, atribut resource, dan tracer. Pilih protokol yang sesuai dengan lingkungan Anda.

HTTP

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;

public class OpenTelemetrySupport {

    static {
        // Definisikan sumber daya yang mendeskripsikan layanan ini
        Resource resource = Resource.getDefault()
                .merge(Resource.create(Attributes.of(
                        ResourceAttributes.SERVICE_NAME, "<your-service-name>",
                        ResourceAttributes.SERVICE_VERSION, "<your-version>",
                        ResourceAttributes.DEPLOYMENT_ENVIRONMENT, "<your-env>",
                        ResourceAttributes.HOST_NAME, "<your-host-name>"
                )));

        // Buat penyedia jejak dengan exporter OTLP gRPC
        SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
                .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder()
                        .setEndpoint("<endpoint>")         // Titik akhir gRPC dari bagian Prasyarat
                        .addHeader("Authentication", "<token>")  // Token autentikasi dari bagian Prasyarat
                        .build()).build())
                .setResource(resource)
                .build();

        // Daftarkan SDK secara global
        OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
                .setTracerProvider(sdkTracerProvider)
                .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
                .buildAndRegisterGlobal();

        tracer = openTelemetry.getTracer("OpenTelemetry Tracer", "1.0.0");
    }

    private static Tracer tracer;

    public static Tracer getTracer() {
        return tracer;
    }
}

gRPC

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;

public class OpenTelemetrySupport {

    static {
        // Definisikan resource yang menggambarkan layanan ini
        Resource resource = Resource.getDefault()
                .merge(Resource.create(Attributes.of(
                        ResourceAttributes.SERVICE_NAME, "<your-service-name>",
                        ResourceAttributes.SERVICE_VERSION, "<your-version>",
                        ResourceAttributes.DEPLOYMENT_ENVIRONMENT, "<your-env>",
                        ResourceAttributes.HOST_NAME, "<your-host-name>"
                )));

        // Bangun penyedia tracer dengan eksporter OTLP gRPC
        SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
                .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder()
                        .setEndpoint("<endpoint>")         // Titik akhir gRPC dari bagian Prasyarat
                        .addHeader("Authentication", "<token>")  // Token otentikasi dari bagian Prasyarat
                        .build()).build())
                .setResource(resource)
                .build();

        // Daftarkan SDK secara global
        OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
                .setTracerProvider(sdkTracerProvider)
                .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
                .buildAndRegisterGlobal();

        tracer = openTelemetry.getTracer("OpenTelemetry Tracer", "1.0.0");
    }

    private static Tracer tracer;

    public static Tracer getTracer() {
        return tracer;
    }
}

Langkah 3: Buat span

Gunakan tracer untuk membuat span induk dan anak. Setiap span merekam satu unit pekerjaan, beserta atribut dan status error-nya.

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.context.Scope;

public class Main {

    public static void parentMethod() {
        // Mulai span induk
        Span span = OpenTelemetrySupport.getTracer().spanBuilder("parent span").startSpan();
        try (Scope scope = span.makeCurrent()) {
            span.setAttribute("good", "job");
            childMethod();
        } catch (Throwable t) {
            span.setStatus(StatusCode.ERROR, "handle parent span error");
        } finally {
            span.end();
        }
    }

    public static void childMethod() {
        // Mulai span anak — secara otomatis terhubung ke induk melalui Context
        Span span = OpenTelemetrySupport.getTracer().spanBuilder("child span").startSpan();
        try (Scope scope = span.makeCurrent()) {
            span.setAttribute("hello", "world");
        } catch (Throwable t) {
            span.setStatus(StatusCode.ERROR, "handle child span error");
        } finally {
            span.end();
        }
    }

    public static void main(String[] args) {
        parentMethod();
    }
}

Langkah 4: Jalankan aplikasi dan verifikasi

Jalankan aplikasi, lalu buka Konsol Managed Service for OpenTelemetry. Pada halaman Applications, klik nama aplikasi Anda dan konfirmasi bahwa jejak muncul.

Metode 3: Gabungkan Java agent dengan SDK

Gunakan agen untuk cakupan otomatis yang luas dan SDK untuk span kustom yang terarah. Agen secara otomatis mengonfigurasi SDK saat startup melalui dependensi opentelemetry-sdk-extension-autoconfigure, sehingga Anda tidak perlu kelas helper OpenTelemetrySupport dari Metode 2.

Langkah 1: Unduh agen

Unduh OpenTelemetry Java agent seperti yang dijelaskan di Metode 1, Langkah 1.

Langkah 2: Tambahkan dependensi Maven

Selain dependensi di Metode 2, Langkah 1, tambahkan berikut ini:

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-extension-annotations</artifactId>
</dependency>
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
    <version>1.23.0-alpha</version>
</dependency>
Dependensi opentelemetry-sdk-extension-autoconfigure mentransfer pengaturan agen ke SDK secara otomatis, sehingga Anda tidak perlu mengonfigurasi eksporter atau atribut resource dalam kode.

Dependensi pom.xml lengkap

<dependencies>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-api</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-trace</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-extension-annotations</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-otlp</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-semconv</artifactId>
        <version>1.30.0-alpha</version>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
        <version>1.23.0-alpha</version>
    </dependency>
</dependencies>

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

Langkah 3: Dapatkan tracer

Karena agen menangani inisialisasi SDK, dapatkan tracer global secara langsung:

OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0");

Langkah 4: Tambahkan instrumen kustom

Tiga teknik untuk menambahkan instrumenasi di atas agen:

Teknik 1: Tambahkan atribut ke span yang dibuat otomatis

Panggil Span.current() di dalam metode yang sudah diinstrumenasi untuk melampirkan atribut bisnis:

@RequestMapping("/async")
public String async() {
    Span span = Span.current();
    span.setAttribute("user.id", "123456");
    userService.async();
    child("vip");
    return "async";
}

Teknik 2: Gunakan @WithSpan untuk instrumen berbasis anotasi

Anotasikan metode dengan @WithSpan untuk membuat span secara otomatis. Gunakan @SpanAttribute untuk merekam parameter:

@WithSpan
private void child(@SpanAttribute("user.type") String userType) {
    System.out.println(userType);
    biz();
}

Teknik 3: Buat span secara manual dengan tracer

Untuk kontrol penuh, bangun span dengan API tracer. Contoh ini juga menyebarkan konteks ke thread asinkron:

private void biz() {
    Tracer tracer = GlobalOpenTelemetry.get().getTracer("tracer");
    Span span = tracer.spanBuilder("biz (manual)")
        .setParent(Context.current().with(Span.current()))  // opsional — diatur secara otomatis
        .startSpan();

    try (Scope scope = span.makeCurrent()) {
        span.setAttribute("biz-id", "111");

        // Sebarkan konteks ke tugas asinkron
        es.submit(() -> {
            Span asyncSpan = tracer.spanBuilder("async")
                .setParent(Context.current().with(span))
                .startSpan();
            try {
                Thread.sleep(1000L);  // simulasi pekerjaan asinkron
            } catch (Throwable e) {
                // tangani error
            }
            asyncSpan.end();
        });

        Thread.sleep(1000);  // simulasi logika bisnis
    } catch (Throwable t) {
        span.setStatus(StatusCode.ERROR, "handle biz error");
    } finally {
        span.end();
    }
}

Kode controller dan service lengkap

Controller (com.alibaba.arms.brightroar.console.controller):

package com.alibaba.arms.brightroar.console.controller;

import com.alibaba.arms.brightroar.console.service.UserService;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.extension.annotations.SpanAttribute;
import io.opentelemetry.extension.annotations.WithSpan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    private ExecutorService es = Executors.newFixedThreadPool(5);

    // Teknik 1: Tambahkan atribut ke span yang dibuat otomatis
    @RequestMapping("/async")
    public String async() {
        System.out.println("UserController.async -- " + Thread.currentThread().getId());
        Span span = Span.current();
        span.setAttribute("user.id", "123456");
        userService.async();
        child("vip");
        return "async";
    }

    // Teknik 2: Instrumen berbasis anotasi
    @WithSpan
    private void child(@SpanAttribute("user.type") String userType) {
        System.out.println(userType);
        biz();
    }

    // Teknik 3: Pembuatan span manual
    private void biz() {
        Tracer tracer = GlobalOpenTelemetry.get().getTracer("tracer");
        Span span = tracer.spanBuilder("biz (manual)")
            .setParent(Context.current().with(Span.current()))
            .startSpan();

        try (Scope scope = span.makeCurrent()) {
            span.setAttribute("biz-id", "111");

            es.submit(new Runnable() {
                @Override
                public void run() {
                    Span asyncSpan = tracer.spanBuilder("async")
                        .setParent(Context.current().with(span))
                        .startSpan();
                    try {
                        Thread.sleep(1000L); // simulasi pekerjaan asinkron
                    } catch (Throwable e) {
                    }
                    asyncSpan.end();
                }
            });

            Thread.sleep(1000); // simulasi logika bisnis
            System.out.println("biz done");
            OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
            openTelemetry.getPropagators();
        } catch (Throwable t) {
            span.setStatus(StatusCode.ERROR, "handle biz error");
        } finally {
            span.end();
        }
    }

}

Service (com.alibaba.arms.brightroar.console.service):

package com.alibaba.arms.brightroar.console.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Async
    public void async() {
        System.out.println("UserService.async -- " + Thread.currentThread().getId());
        System.out.println("my name is async");
        System.out.println("UserService.async -- ");
    }
}

Langkah 5: Konfigurasikan parameter JVM dan jalankan aplikasi

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=<your-service-name> \
  -Dotel.exporter.otlp.headers=Authentication=<token> \
  -Dotel.exporter.otlp.endpoint=<endpoint> \
  -jar /path/to/your/app.jar

Contoh:

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.resource.attributes=service.name=ot-java-agent-sample \
  -Dotel.exporter.otlp.headers=Authentication=b590xxxxuqs@3a75d95xxxxx9b_b59xxxxguqs@53dxxxx2afe8301 \
  -Dotel.exporter.otlp.endpoint=http://tracing-analysis-dc-bj:8090 \
  -jar /path/to/your/app.jar
Untuk meneruskan data jejak melalui OpenTelemetry Collector, hapus -Dotel.exporter.otlp.headers=Authentication=<token> dan atur <endpoint> ke alamat Collector pada mesin on-premises Anda.

Buka Konsol Managed Service for OpenTelemetry. Pada halaman Applications, klik nama aplikasi Anda dan konfirmasi bahwa jejak muncul.

Framework Java yang didukung

OpenTelemetry Java agent secara otomatis menginstrumenasi framework berikut. Untuk daftar lengkap dan terbaru, lihat Library, framework, server aplikasi, dan JVM yang didukung.

Framework Java yang didukung

FrameworkVersion
Akka Actors2.5 atau lebih baru
Akka HTTP10.0 atau lebih baru
Apache Axis21.6 atau lebih baru
Apache Camel2.20 atau lebih baru (tidak termasuk 3.x)
Apache DBCP2.0 atau lebih baru
Apache CXF JAX-RS3.2 atau lebih baru
Apache CXF JAX-WS3.0 atau lebih baru
Apache Dubbo2.7 atau lebih baru
Apache HttpAsyncClient4.1 atau lebih baru
Apache HttpClient2.0 atau lebih baru
Apache Kafka Producer/Consumer API0.11 atau lebih baru
Apache Kafka Streams API0.11 atau lebih baru
Apache MyFaces1.2 atau lebih baru (tidak termasuk 3.x)
Apache Pulsar2.8 atau lebih baru
Apache RocketMQ gRPC/Protobuf-based Client5.0 atau lebih baru
Apache RocketMQ Remoting-based Client4.8 atau lebih baru
Apache Struts 22.3 atau lebih baru
Apache Tapestry5.4 atau lebih baru
Apache Wicket8.0 atau lebih baru
Armeria1.3 atau lebih baru
AsyncHttpClient1.9 atau lebih baru
AWS Lambda1.0 atau lebih baru
AWS SDK1.11.x dan 2.2 atau lebih baru
Azure Core1.14 atau lebih baru
Cassandra Driver3.0 atau lebih baru
Couchbase Client2.0 atau lebih baru dan 3.1 atau lebih baru
c3p00.9.2 atau lebih baru
Dropwizard Metrics4.0 atau lebih baru (dinonaktifkan secara default)
Dropwizard Views0.7 atau lebih baru
Eclipse Grizzly2.3 atau lebih baru
Eclipse Jersey2.0 atau lebih baru (tidak termasuk 3.x)
Eclipse Jetty HTTP Client9.2 atau lebih baru (tidak termasuk 10 atau lebih baru)
Eclipse Metro2.2 atau lebih baru
Eclipse Mojarra1.2 atau lebih baru (tidak termasuk 3.x)
Elasticsearch API Client7.16 atau lebih baru dan 8.0 atau lebih baru
Elasticsearch REST Client5.0 atau lebih baru
Elasticsearch Transport Client5.0 atau lebih baru
Finatra2.9 atau lebih baru
Geode Client1.4 atau lebih baru
Google HTTP Client1.19 atau lebih baru
Grails3.0 atau lebih baru
GraphQL Java12.0 atau lebih baru
gRPC1.6 atau lebih baru
Guava ListenableFuture10.0 atau lebih baru
GWT2.0 atau lebih baru
Hibernate3.3 atau lebih baru
Hibernate Reactive1.0 atau lebih baru
HikariCP3.0 atau lebih baru
HttpURLConnectionJava 8 atau lebih baru
Hystrix1.4 atau lebih baru
Java ExecutorsJava 8 atau lebih baru
Java Http ClientJava 11 atau lebih baru
java.util.loggingJava 8 atau lebih baru
Java PlatformJava 8 atau lebih baru
JAX-RS0.5 atau lebih baru
JAX-RS Client1.1 atau lebih baru
JAX-WS2.0 atau lebih baru (tidak termasuk 3.x)
JBoss Log Manager1.1 atau lebih baru
JDBCJava 8 atau lebih baru
Jedis1.4 atau lebih baru
JMS1.1 atau lebih baru
Jodd Http4.2 atau lebih baru
JSP2.3 atau lebih baru
Kotlin Coroutines1.0 atau lebih baru
Ktor1.0 atau lebih baru
Kubernetes Client7.0 atau lebih baru
Lettuce4.0 atau lebih baru
Log4j 11.2 atau lebih baru
Log4j 22.11 atau lebih baru
Logback1.0 atau lebih baru
Micrometer1.5 atau lebih baru
MongoDB Driver3.1 atau lebih baru
Netty3.8 atau lebih baru
OkHttp2.2 atau lebih baru
Oracle UCP11.2 atau lebih baru
OSHI5.3.1 atau lebih baru
Play2.4 atau lebih baru
Play WS1.0 atau lebih baru
Quartz2.0 atau lebih baru
R2DBC1.0 atau lebih baru
RabbitMQ Client2.7 atau lebih baru
Ratpack1.4 atau lebih baru
Reactor3.1 atau lebih baru
Reactor Netty0.9 atau lebih baru
Rediscala1.8 atau lebih baru
Redisson3.0 atau lebih baru
RESTEasy3.0 atau lebih baru
Restlet1.0 atau lebih baru
RMIJava 8 atau lebih baru
RxJava1.0 atau lebih baru
Scala ForkJoinPool2.8 atau lebih baru
Servlet2.2 atau lebih baru
Spark Web Framework2.3 atau lebih baru
Spring BootN/A
Spring Batch3.0 atau lebih baru (tidak termasuk 5.0 atau lebih baru)
Spring Cloud Gateway2.0 atau lebih baru
Spring Data1.8 atau lebih baru
Spring Integration4.1 atau lebih baru (tidak termasuk 6.0 atau lebih baru)
Spring JMS2.0 atau lebih baru
Spring Kafka2.7 atau lebih baru
Spring RabbitMQ1.0 atau lebih baru
Spring Scheduling3.1 atau lebih baru
Spring RestTemplate3.1 atau lebih baru
Spring Web MVC3.1 atau lebih baru
Spring Web Services2.0 atau lebih baru
Spring WebFlux5.3 atau lebih baru
Spymemcached2.12 atau lebih baru
Tomcat JDBC Pool8.5 atau lebih baru
Twilio6.6 atau lebih baru (tidak termasuk 8.x)
Undertow1.4 atau lebih baru
Vaadin14.2 atau lebih baru
Vert.x Web3.0 atau lebih baru
Vert.x HttpClient3.0 atau lebih baru
Vert.x Kafka Client3.6 atau lebih baru
Vert.x RxJava23.5 atau lebih baru
Vert.x SQL Client4.0 atau lebih baru
Vibur DBCP11.0 atau lebih baru
ZIO2.0 atau lebih baru