skills/jander99/skills/spring-boot-core

spring-boot-core

SKILL.md

Spring Boot Core

Build production-ready Spring Boot microservices with proper dependency injection, externalized configuration, and health monitoring.

What I Do

  • Scaffold and structure Spring Boot 3.x microservices (packages, config, modules)
  • Fix DI and startup failures (UnsatisfiedDependencyException, NoSuchBeanDefinitionException)
  • Implement externalized configuration (@ConfigurationProperties, profiles, secrets)
  • Configure Actuator health/info/metrics endpoints safely for production
  • Set up Kubernetes liveness and readiness probes

When to Use Me

  • Create, scaffold, or structure a new Spring Boot microservice
  • Configure beans with constructor injection
  • Set up @ConfigurationProperties with validation
  • Implement profile-based configuration (dev, staging, prod)
  • Configure Actuator endpoints and health checks
  • Troubleshoot bean lifecycle or injection issues

Context7 Integration

Query Context7 MCP for current Spring Boot documentation:

context7_resolve-library-id: "Spring Boot"
context7_query-docs: libraryId="/spring-projects/spring-boot", query="ConfigurationProperties"

Core Patterns

Constructor Injection

Use constructor injection for all dependencies. Single constructors are auto-wired.

@Service
public class OrderService {
    private final OrderRepository orderRepository;
    private final PaymentClient paymentClient;

    public OrderService(OrderRepository orderRepository, PaymentClient paymentClient) {
        this.orderRepository = orderRepository;
        this.paymentClient = paymentClient;
    }
}

Benefits: Immutable fields, explicit dependencies, easier testing, better IDE support.

@ConfigurationProperties with Validation

@ConfigurationProperties("app.service")
@Validated
public class ServiceProperties {
    @NotBlank private String name;
    @NotNull private Duration timeout = Duration.ofSeconds(30);
    @Valid private final Security security = new Security();
    // Getters/setters required
}

Enable with @ConfigurationPropertiesScan on main class.

Boot 3.x Note: Records with constructor binding are supported:

@ConfigurationProperties("app")
public record AppConfig(@NotBlank String name, @NotNull Duration timeout) {}

Profile-Based Configuration

src/main/resources/
  application.yml           # Defaults
  application-dev.yml       # Dev overrides  
  application-prod.yml      # Production
# application-prod.yml
app.service:
  timeout: 10s
  security.api-key: ${API_KEY}

Activate: --spring.profiles.active=prod or SPRING_PROFILES_ACTIVE=prod

Actuator Health Configuration

management:
  endpoints.web.exposure.include: health,info,metrics
  endpoint.health:
    show-details: when-authorized
    probes.enabled: true  # Kubernetes liveness/readiness

Custom health indicator:

@Component
public class ApiHealthIndicator implements HealthIndicator {
    private final ApiClient client;
    public ApiHealthIndicator(ApiClient client) { this.client = client; }
    
    @Override
    public Health health() {
        return client.isReachable() 
            ? Health.up().build() 
            : Health.down().withDetail("reason", "unreachable").build();
    }
}

Service Directory Structure

com.example.service/
  Application.java           # @SpringBootApplication in root
  config/                    # @Configuration classes
  controller/                # @RestController
  service/                   # @Service business logic
  repository/                # @Repository data access
  model/                     # Domain entities
  dto/                       # Request/response objects
  exception/                 # Custom exceptions
  client/                    # External API clients

Quick Reference

Need Solution
Inject dependency Constructor injection
Multiple constructors @Autowired on preferred
Optional dependency Optional<T> parameter
External config @ConfigurationProperties + @Validated
Env-specific application-{profile}.yml
Secrets Environment variables ${VAR_NAME}
Health check Custom HealthIndicator bean
K8s probes management.endpoint.health.probes.enabled=true

Common Errors

Error Solution
NoSuchBeanDefinitionException Add @Component; verify package under @SpringBootApplication
UnsatisfiedDependencyException Break circular dependency; use @Lazy
BindException on startup Check YAML syntax; verify property names
Validation not triggering Add @Validated to @ConfigurationProperties class
Actuator 404 Add to management.endpoints.web.exposure.include

Anti-Patterns

// AVOID: Field injection
@Autowired private Repository repo;

// AVOID: Hardcoded config  
private static final String URL = "https://api.example.com";

// PREFER: Constructor injection + externalized config

Related Skills

Skill Use When
spring-data Database access (JPA, MongoDB, Redis)
spring-security Authentication, OAuth2
spring-testing Unit/integration tests
spring-reactive WebFlux, R2DBC

References

Reference Load When
research.md Need detailed rationale and advanced patterns
Weekly Installs
1
Repository
jander99/skills
GitHub Stars
1
First Seen
4 days ago
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1