Spring Boot Patterns
Files: skills/springboot-patterns/SKILL.md + skills/jpa-patterns/SKILL.md
JPA/Hibernate Patterns
Entity Design
@EntityListeners(AuditingEntityListener.class)for@CreatedDate/@LastModifiedDate@Enumerated(EnumType.STRING)for enum fields- Indexes on common query fields
N+1 Prevention
- Default to lazy loading
JOIN FETCHin JPQL when eager loading needed- DTO projections for read-only paths
Repository
- Spring Data JPA interfaces with custom JPQL
- Interface-based projections for lightweight queries
- Cursor pagination:
id > :lastIdwith ordering
Transactions
@Transactional on service methods. readOnly = true for queries. Short transactions.
Connection Pool (HikariCP)
maximum-pool-size=20, minimum-idle=5, connection-timeout=30000
Migrations
Flyway or Liquibase. Never Hibernate auto DDL in production.
Testing
@DataJpaTest with Testcontainers. Verify SQL efficiency via Hibernate SQL logging.
Production Defaults
- Constructor injection (no field injection)
spring.mvc.problemdetails.enabled=true(RFC 7807)- Null-safety via
@NonNullandOptional - Structured JSON logging via Logback
- Metrics: Micrometer + Prometheus/OTel
Remember: Keep controllers thin, services focused, repositories simple, errors handled centrally.