API versioning strategies

API versioning manages evolution while supporting existing clients. URI versioning uses paths—/api/v1/users, /api/v2/users. Header versioning employs custom headers—X-API-Version: 2. Content negotiation uses Accept headers—application/vnd.myapi.v2+jso

Custom Spring Boot starters

Spring Boot starters provide autoconfiguration for libraries. I create custom starters to standardize configurations across microservices. Starters contain @Configuration classes with @ConditionalOnClass, @ConditionalOnProperty annotations. spring.fac

CORS configuration for cross-origin requests

CORS (Cross-Origin Resource Sharing) controls which domains can access APIs. Browsers enforce same-origin policy by default. I configure allowed origins, methods, headers, and credentials. @CrossOrigin enables CORS per controller or method. Global con

Lombok for reducing boilerplate code

Project Lombok generates common Java code via annotations at compile-time. @Data creates getters, setters, toString, equals, and hashCode. @Builder implements the builder pattern. @Slf4j provides logger instances. @NoArgsConstructor and @AllArgsConstr

Database transactions and isolation levels

Spring's @Transactional manages database transactions declaratively. Transaction propagation controls behavior when methods call other transactional methods—REQUIRED, REQUIRESNEW, NESTED. Isolation levels prevent concurrent access issues—READUNCOMMITT

Rate limiting and API throttling

Rate limiting prevents API abuse and ensures fair resource usage. I implement rate limiting using Bucket4j for token bucket algorithm or Redis for distributed scenarios. Limits apply per user, IP, or API key. HTTP 429 (Too Many Requests) indicates lim

File upload and download handling

Spring Boot handles multipart file uploads efficiently. MultipartFile represents uploaded files. I validate file types, sizes, and content. Files are stored locally, in cloud storage (S3, Azure Blob), or databases. Streaming large files prevents memor

Pagination and sorting with Spring Data

Spring Data provides elegant pagination and sorting mechanisms. Pageable interface defines page number, size, and sort parameters. Page wraps results with metadata—total elements, total pages, current page. Sort defines ordering by multiple properties

Reactive programming with WebFlux

Spring WebFlux enables reactive, non-blocking applications using Project Reactor. Mono represents 0-1 elements, Flux represents 0-N elements. Reactive programming handles high concurrency with fewer threads. I use reactive repositories with R2DBC for

Actuator for production monitoring

Spring Boot Actuator provides production-ready features—health checks, metrics, info endpoints. /actuator/health shows application status for load balancers. /actuator/metrics exposes JVM metrics, HTTP stats, custom metrics. /actuator/info displays ap

Docker containerization for Spring Boot

Docker packages Spring Boot applications with dependencies into portable containers. Multi-stage builds optimize image size—build stage compiles code, runtime stage contains only necessities. I use official OpenJDK base images. Layered JARs improve ca

Logging with SLF4J and Logback

SLF4J provides a logging facade, Logback implements it efficiently. I use logger levels—TRACE, DEBUG, INFO, WARN, ERROR—to control verbosity. Parameterized logging with {} placeholders improves performance versus string concatenation. MDC (Mapped Diag