Josh Long

Kubernetes Native Java

Can your Java application start in 62 milliseconds? Learn how to build lightweight, Kubernetes-native microservices with Spring Boot and GraalVM.

Kubernetes Native Java
#1about 2 minutes

Optimizing for production with microservices

Microservices enable faster iteration by allowing smaller teams to work on smaller codebases, but introduce the complexities of distributed systems.

#2about 3 minutes

Bootstrapping a new project with modern Java

Use start.spring.io to initialize a new application and choose Java 17 for its technical and performance superiority over older versions.

#3about 3 minutes

Building a reactive service with Spring Data

Reactive programming simplifies concurrent code, composes different data sources, and provides a single place to handle reliability patterns like backpressure.

#4about 5 minutes

Creating an HTTP endpoint and seeding data

Implement a simple REST controller to expose data and use a Spring Bean to programmatically initialize the database with sample records on startup.

#5about 2 minutes

Gaining observability with Spring Boot Actuator

The Spring Boot Actuator provides managed HTTP endpoints for monitoring application health, metrics, configuration, and internal state.

#6about 3 minutes

Embedding build information with the info endpoint

Use the Actuator's info endpoint with the git-commit-id-plugin to automatically expose Git commit details for better traceability in production.

#7about 2 minutes

Implementing Kubernetes liveness and readiness probes

Spring Boot Actuator provides dedicated health endpoints for Kubernetes liveness and readiness probes to manage the application lifecycle.

#8about 2 minutes

Configuring graceful shutdown for Kubernetes deployments

Enable graceful shutdown in Spring Boot to properly handle the SIGTERM signal from Kubernetes, allowing in-flight requests to complete before termination.

#9about 4 minutes

Managing environment-specific application configuration

Use profile-specific YAML documents and the spring.config.import property to load configuration tailored for different environments like Kubernetes.

#10about 7 minutes

Understanding GraalVM native image compilation

GraalVM's native image compiler trades the JVM's adaptive JIT compilation for a pre-compiled binary, resulting in faster startup and lower memory usage.

#11about 4 minutes

Building and running a native executable

Compile a Spring Boot application into a native binary using a Maven profile to achieve startup times under 100ms and significantly reduced memory consumption.

#12about 2 minutes

Creating an edge service with Spring Cloud Gateway

Implement an API gateway using Spring Cloud Gateway to define routes that proxy, filter, and transform requests to downstream microservices.

#13about 3 minutes

Exposing a GraphQL API for flexible data fetching

Build a GraphQL endpoint on an edge service to provide clients with a flexible way to query and compose data from multiple backend services.

#14about 1 minute

Comparing Project Loom with reactive programming

Project Loom will make threads cheaper to scale, but reactive programming remains a valuable model for safely composing concurrent and asynchronous operations.

Related jobs
Jobs that call for the skills explored in this talk.

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.