AgentSkillsCN

spring-boot-basics

Spring Boot 基础全面指南——自动配置、启动器、属性和配置文件

SKILL.md
--- frontmatter
name: spring-boot-basics
description: Comprehensive guide to Spring Boot fundamentals - auto-configuration, starters, properties, and profiles
sasmp_version: "1.3.0"
bonded_agent: 01-spring-boot-fundamentals
bond_type: PRIMARY_BOND
version: "2.0.0"
updated: "2024-12-30"

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

NameTypeRequiredDefaultValidation
spring_versionstring3.3.xSemver format
java_versionnumber2117, 21, or 23
build_toolenummavenmaven | gradle
packagingenumjarjar | 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

java
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Configuration Properties

java
@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
    ) {}
}
yaml
# 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

yaml
# 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

yaml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      show-details: when_authorized
      probes:
        enabled: true

Retry Logic

ScenarioMax RetriesBackoffNotes
Config server connection61s, 1.5x multiplierUse spring.config.import
Database connection32s exponentialConfigure in connection pool

Troubleshooting

Failure Modes

IssueDiagnosisFix
Bean not createdCheck @ConditionalOn*Run with --debug flag
Property not bindingWrong prefix or typeValidate YAML syntax
Profile not activeNot set in envUse -Dspring.profiles.active

Debug Checklist

code
□ 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

java
@SpringBootTest
class ApplicationConfigTest {

    @Autowired
    private AppConfig appConfig;

    @Test
    void shouldLoadConfiguration() {
        assertThat(appConfig.name()).isEqualTo("my-service");
        assertThat(appConfig.database().poolSize()).isEqualTo(10);
    }
}

Usage

code
Skill("spring-boot-basics")

Version History

VersionDateChanges
2.0.02024-12-30Production-grade with examples, troubleshooting
1.0.02024-01-01Initial release