Java
Java remains a core language for enterprise DevOps and SRE teams, powering cloud-native microservices, automation tools, and CI/CD pipelines across AWS, Azure, and GCP. Its mature ecosystem, JVM portability, and robust frameworks make it ideal for building scalable, observable, and secure applications.
Why DevOps & SREs Should Learn Java
- Cloud-Native: Java frameworks (Spring Boot, Quarkus, Micronaut) are optimized for Kubernetes, Docker, and serverless deployments.
- Observability: Strong support for metrics (Micrometer, Prometheus), distributed tracing (OpenTelemetry, Jaeger), and logging (SLF4J, Logback).
- CI/CD Integration: Java projects integrate seamlessly with GitHub Actions, Azure Pipelines, and GitLab CI/CD.
- Cross-Platform: JVM runs on Linux, NixOS, WSL, and all major clouds.
- LLM Integration: Java can call LLM APIs (OpenAI, Azure OpenAI) for automation, code review, and incident summarization.
Real-Life DevOps & SRE Examples
1. Spring Boot REST API with Health Checks
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class HealthController {
@GetMapping("/health")
public String health() {
return "OK";
}
}
2. Dockerfile for Cloud-Native Java App
FROM eclipse-temurin:17-jre-alpine
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3. Prometheus Metrics with Micrometer
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class MetricsController {
private final MeterRegistry registry;
public MetricsController(MeterRegistry registry) {
this.registry = registry;
}
@GetMapping("/custom-metric")
public String customMetric() {
registry.counter("custom_requests_total").increment();
return "Metric incremented!";
}
}
4. CI/CD Pipeline (GitHub Actions)
name: Java CI/CD
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Build with Maven
run: mvn clean install
- name: Run Tests
run: mvn test
- name: Build Docker Image
run: docker build -t myorg/myapp:${{ github.sha }} .
5. LLM Integration for Incident Summaries
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class LLMIntegration {
public static void main(String[] args) throws Exception {
String logContents = "Example incident log contents";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.openai.com/v1/chat/completions"))
.header("Authorization", "Bearer sk-...")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{" +
"\"model\":\"gpt-4\"," +
"\"messages\":[{" +
"\"role\":\"system\",\"content\":\"Summarize this incident log for SREs.\"},{" +
"\"role\":\"user\",\"content\":\"" + logContents + "\"}]}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Best Practices (2025)
- Use Spring Boot or Quarkus for cloud-native microservices
- Containerize apps with multi-stage Dockerfiles
- Expose health and metrics endpoints for observability
- Integrate with CI/CD for automated testing and deployment
- Store secrets in environment variables or secret managers
- Use OpenTelemetry for distributed tracing
- Write unit and integration tests (JUnit, Testcontainers)
Common Pitfalls
- Hardcoding credentials in code or configs
- Not exposing health/metrics endpoints
- Ignoring JVM resource limits in containers
- Overlooking dependency updates (use Dependabot or Renovate)
- Not monitoring application logs and metrics
References
Java Joke: Why did the SRE refuse to use Java for their scripts? Too many exceptions in production!