All Integrations
Languagestigerops-spring-boot-starter Maven artifact

Spring Boot Integration

Auto-instrument Spring Boot services with one starter dependency. JVM heap and GC metrics, Actuator endpoint monitoring, Micrometer distributed tracing — zero configuration.

Setup

How It Works

01

Add the Starter Dependency

Add com.tigerops:tigerops-spring-boot-starter to your pom.xml or build.gradle. The starter auto-configures Micrometer OTLP registry, Spring Boot Actuator metrics exposure, and distributed tracing via Micrometer Tracing.

02

Configure application.yml

Set tigerops.api-key, tigerops.service-name, and tigerops.environment in application.yml or as environment variables with the TIGEROPS_ prefix. Spring Boot's relaxed binding means all formats are supported.

03

Auto-Configuration Activates

The TigerOps AutoConfiguration class detects the Spring Boot version, configures the OTLP Micrometer registry for metrics, and registers a Micrometer Tracing bridge for distributed traces automatically.

04

JVM, Actuator & Traces Flow

Within seconds TigerOps receives JVM heap, GC, thread, and class loader metrics from Actuator, along with Spring MVC and WebFlux request traces, JDBC query spans, and Spring Data repository call timing.

Capabilities

What You Get Out of the Box

JVM Runtime Metrics

Heap used/committed/max per generation, GC pause duration histograms, class loader loaded/unloaded counts, thread states (runnable, blocked, waiting), and JIT compilation time — all from the JVM MBeanServer.

Spring Actuator Integration

TigerOps auto-exposes all Actuator metrics endpoints and scrapes them on a configurable interval. Health check status, info endpoint data, and custom Actuator metrics are all forwarded to TigerOps.

Micrometer Distributed Tracing

The TigerOps starter integrates with Micrometer Tracing (Spring Boot 3) and Spring Cloud Sleuth (Spring Boot 2.x) to create spans for every HTTP request, JDBC operation, and messaging interaction.

Spring Data & JDBC Spans

Spring Data repository method calls and JDBC template queries create child spans with method name, SQL, and execution time. Hibernate ORM queries include the HQL/JPQL before parameterization.

Spring Messaging & Events

Kafka and RabbitMQ message producer and consumer spans via Spring Messaging auto-instrumentation. ApplicationEvent publishing and @EventListener execution are traced as child spans.

WebFlux & Project Reactor

Spring WebFlux reactive request handling creates spans that span the full reactive pipeline including flatMap, zip, and delay operators. Reactor Context propagates trace context across async operators.

Configuration

Install & Configure

One starter dependency. One YAML block. Full Spring Boot observability.

pom.xml + application.yml
<!-- pom.xml — add the TigerOps starter -->
<dependency>
  <groupId>com.tigerops</groupId>
  <artifactId>tigerops-spring-boot-starter</artifactId>
  <version>0.1.0</version>
</dependency>

<!-- Also ensure Actuator is present -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

# application.yml
tigerops:
  api-key: ${TIGEROPS_API_KEY}
  service-name: ${TIGEROPS_SERVICE_NAME:my-service}
  environment: ${TIGEROPS_ENVIRONMENT:production}

  tracing:
    sample-rate: 0.1       # 10% in production
    propagation: w3c       # w3c | b3 | b3multi

  metrics:
    export-interval: 30s   # Push metrics every 30s

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus

# Custom span with @Observed (Micrometer Tracing)
import io.micrometer.observation.annotation.Observed;
import org.springframework.stereotype.Service;

@Service
public class InventoryService {

    @Observed(name = "inventory.check",
              contextualName = "check-stock",
              lowCardinalityKeyValues = {"service", "inventory"})
    public boolean checkStock(String sku, int quantity) {
        return repository.findBySku(sku)
            .map(item -> item.getQuantity() >= quantity)
            .orElse(false);
    }
}

# Manual span with ObservationRegistry
import io.micrometer.observation.ObservationRegistry;

@RestController
public class OrderController {
    private final ObservationRegistry registry;

    @PostMapping("/orders")
    public Order createOrder(@RequestBody OrderRequest req) {
        return Observation.createNotStarted("order.create", registry)
            .lowCardinalityKeyValue("order.type", req.getType())
            .observe(() -> orderService.create(req));
    }
}
FAQ

Common Questions

Which Spring Boot versions are supported?

Spring Boot 3.0, 3.1, 3.2, and 3.3 are fully supported with Micrometer Tracing. Spring Boot 2.7 is supported via Spring Cloud Sleuth. The starter auto-detects the Spring Boot version and configures the appropriate tracing bridge.

Does the starter conflict with existing Micrometer registry configuration?

No. The TigerOps Micrometer registry is added as a composite registry alongside any existing registries (Prometheus, Graphite, etc.). All metrics are exported to all configured registries simultaneously.

How do I configure sampling rates for high-throughput Spring Boot services?

Set tigerops.tracing.sample-rate=0.01 in application.yml for 1% sampling. TigerOps also supports probabilistic, rate-limiting, and parent-based sampling strategies via the tigerops.tracing.sampler property.

Does TigerOps work with Spring Boot native image (GraalVM)?

Yes. The TigerOps starter includes GraalVM hints for native image compilation. Add the tigerops-spring-boot-starter-native dependency instead of the standard starter for optimized native image support.

Can I use TigerOps with Spring Cloud Gateway?

Yes. The TigerOps WebFlux instrumentation traces Gateway route filters, predicates, and upstream proxy requests. Route ID, predicate match status, and upstream response time are captured as span attributes.

Get Started

Full Spring Boot Observability in One Starter

JVM metrics, Actuator monitoring, Micrometer tracing, and Spring Data spans — no code changes required.