Spring Boot Basics Skill
Master Spring Boot fundamentals including auto-configuration, starters, externalized configuration, and profile management.
Overview
This skill provides comprehensive knowledge for building production-ready Spring Boot applications from scratch.
Parameters
| Name | Type | Required | Default | Validation |
|------|------|----------|---------|------------|
| spring_version | string | ✗ | 3.3.x | Semver format |
| java_version | number | ✗ | 21 | 17, 21, or 23 |
| build_tool | enum | ✗ | maven | maven | gradle |
| packaging | enum | ✗ | jar | jar | war |
Topics Covered
Core (Must Know)
- Auto-Configuration: How Spring Boot auto-configures beans based on classpath
- Starters: Pre-configured dependency sets for common scenarios
- Application Properties: Externalized configuration with
application.properties/yml - Profiles: Environment-specific configuration with
@Profile
Intermediate
- Configuration Properties: Type-safe configuration with
@ConfigurationProperties - Actuator: Production-ready monitoring and management endpoints
- Logging: Logback/Log4j2 configuration and best practices
- DevTools: Development-time features for productivity
Advanced
- Custom Starters: Building reusable starter modules
- Auto-Configuration Classes: Creating custom auto-configuration
- Conditional Beans:
@ConditionalOnProperty,@ConditionalOnClass - Native Compilation: GraalVM native image support
Code Examples
Basic Application
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Configuration Properties
@ConfigurationProperties(prefix = "app")
@Validated
public record AppConfig(
@NotBlank String name,
@NotNull Database database,
List<String> allowedOrigins
) {
public record Database(
@NotBlank String url,
String username,
String password,
@Min(1) @Max(100) int poolSize
) {}
}
# application.yml
app:
name: my-service
database:
url: jdbc:postgresql://localhost:5432/mydb
username: ${DB_USER}
password: ${DB_PASSWORD}
pool-size: 10
allowed-origins:
- http://localhost:3000
- https://myapp.com
Profile-Specific Configuration
# application-dev.yml
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:h2:mem:devdb
---
# application-prod.yml
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:postgresql://${DB_HOST}:5432/proddb
Actuator Configuration
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: when_authorized
probes:
enabled: true
Retry Logic
| Scenario | Max Retries | Backoff | Notes |
|----------|-------------|---------|-------|
| Config server connection | 6 | 1s, 1.5x multiplier | Use spring.config.import |
| Database connection | 3 | 2s exponential | Configure in connection pool |
Troubleshooting
Failure Modes
| Issue | Diagnosis | Fix |
|-------|-----------|-----|
| Bean not created | Check @ConditionalOn* | Run with --debug flag |
| Property not binding | Wrong prefix or type | Validate YAML syntax |
| Profile not active | Not set in env | Use -Dspring.profiles.active |
Debug Checklist
□ Run with --debug to see auto-configuration report
□ Verify property sources with /actuator/env
□ Confirm active profiles with /actuator/info
□ Check application.yml indentation
Unit Test Template
@SpringBootTest
class ApplicationConfigTest {
@Autowired
private AppConfig appConfig;
@Test
void shouldLoadConfiguration() {
assertThat(appConfig.name()).isEqualTo("my-service");
assertThat(appConfig.database().poolSize()).isEqualTo(10);
}
}
Usage
Skill("spring-boot-basics")
Version History
| Version | Date | Changes | |---------|------|---------| | 2.0.0 | 2024-12-30 | Production-grade with examples, troubleshooting | | 1.0.0 | 2024-01-01 | Initial release |