BMAD-METHOD/expansion-packs/bmad-java/data/spring-boot-patterns.md

5.5 KiB

Spring Boot Patterns and Best Practices

Spring Boot Configuration Patterns

Application Properties Management

  • Profile-based Configuration: Use application-{profile}.yml for environment-specific settings
  • External Configuration: Use @ConfigurationProperties for type-safe configuration
  • Environment Variables: Override properties with environment variables
  • Configuration Validation: Use @Validated and @Valid for configuration validation

Dependency Injection Patterns

  • Constructor Injection: Prefer constructor injection over field injection
  • Interface Segregation: Use interfaces for service contracts
  • Component Scanning: Use @ComponentScan for automatic bean discovery
  • Conditional Beans: Use @ConditionalOnProperty for conditional bean creation

Web Development Patterns

REST API Design

  • Resource-based URLs: Use nouns for resources, verbs for actions
  • HTTP Status Codes: Use appropriate status codes for responses
  • Content Negotiation: Support multiple content types (JSON, XML)
  • API Versioning: Use URL versioning or header versioning
  • Pagination: Implement pagination for large datasets
  • Filtering and Sorting: Support query parameters for filtering

Spring MVC Patterns

  • Controller Layer: Keep controllers thin, delegate to services
  • DTO Pattern: Use Data Transfer Objects for API communication
  • Validation: Use Bean Validation annotations
  • Exception Handling: Use @ControllerAdvice for global exception handling
  • Response Wrapping: Use consistent response format

Data Access Patterns

Spring Data JPA Patterns

  • Repository Pattern: Use Spring Data repositories
  • Custom Queries: Use @Query for custom JPQL queries
  • Specifications: Use JPA Specifications for dynamic queries
  • Pagination: Use Pageable for paginated results
  • Auditing: Use @CreatedDate and @LastModifiedDate
  • Soft Delete: Implement soft delete pattern

Transaction Management

  • Declarative Transactions: Use @Transactional annotation
  • Transaction Propagation: Understand propagation behaviors
  • Read-Only Transactions: Use readOnly = true for read operations
  • Rollback Rules: Configure rollback conditions

Security Patterns

Spring Security Configuration

  • Authentication: Implement JWT or OAuth2 authentication
  • Authorization: Use method-level security with @PreAuthorize
  • CORS Configuration: Configure Cross-Origin Resource Sharing
  • CSRF Protection: Enable CSRF protection for state-changing operations
  • Security Headers: Configure security headers

Password Management

  • Password Encoding: Use BCrypt for password hashing
  • Password Policies: Implement password strength requirements
  • Password Reset: Implement secure password reset flow

Testing Patterns

Unit Testing

  • Test Structure: Use Arrange-Act-Assert pattern
  • Mocking: Use Mockito for mocking dependencies
  • Test Data: Use TestContainers for integration testing
  • Test Coverage: Aim for high test coverage

Integration Testing

  • Spring Boot Test: Use @SpringBootTest for integration tests
  • Test Profiles: Use test-specific profiles
  • Test Slices: Use @WebMvcTest, @DataJpaTest for focused tests
  • TestContainers: Use TestContainers for database testing

Performance Patterns

Caching

  • Spring Cache: Use @Cacheable, @CacheEvict, @CachePut
  • Cache Providers: Use Redis, Caffeine, or Ehcache
  • Cache Strategies: Implement appropriate cache strategies
  • Cache Invalidation: Handle cache invalidation properly

Async Processing

  • @Async: Use @Async for asynchronous processing
  • CompletableFuture: Use CompletableFuture for async operations
  • Message Queues: Use RabbitMQ or Apache Kafka for messaging
  • Event Publishing: Use Spring Events for loose coupling

Monitoring and Observability

Health Checks

  • Spring Boot Actuator: Use actuator endpoints for health checks
  • Custom Health Indicators: Implement custom health indicators
  • Health Aggregation: Aggregate health status from dependencies

Metrics and Monitoring

  • Micrometer: Use Micrometer for application metrics
  • Custom Metrics: Implement custom business metrics
  • Distributed Tracing: Use Spring Cloud Sleuth for tracing
  • Logging: Use structured logging with SLF4J and Logback

Error Handling Patterns

Exception Handling

  • Global Exception Handler: Use @ControllerAdvice
  • Custom Exceptions: Create domain-specific exceptions
  • Error Response Format: Use consistent error response format
  • Error Logging: Log errors with appropriate context

Circuit Breaker Pattern

  • Resilience4j: Use Resilience4j for circuit breaker implementation
  • Fallback Methods: Implement fallback methods for failed operations
  • Retry Logic: Implement retry logic with exponential backoff
  • Timeout Handling: Configure appropriate timeouts

AWS Integration Patterns

AWS Services Integration

  • AWS SDK: Use AWS SDK for Java for service integration
  • AWS Configuration: Use AWS configuration properties
  • AWS Profiles: Use AWS profiles for different environments
  • AWS Regions: Configure appropriate AWS regions

Cloud-Native Patterns

  • Configuration Externalization: Use AWS Parameter Store
  • Secrets Management: Use AWS Secrets Manager
  • Service Discovery: Use AWS Service Discovery
  • Load Balancing: Use AWS Application Load Balancer