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

150 lines
5.5 KiB
Markdown

# 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