LLMSkillHub
mirroredCopied from irahardianto/awesome-agv under MIT. irahardianto has not claimed this page, and is not affiliated with LLM SkillHub.

irahardianto / spring-boot-idioms

Spring Boot 3.x framework patterns: constructor-based DI, Spring Data JPA, REST controllers with RFC 7807 error handling, Actuator observability, and slice testing. Use when building or maintaining Spring Boot microservices. Pair with java-idioms.

0
SKILL.md
3.1 KB

Spring Boot Idioms and Patterns

Spring Boot (3.x) rewards auto-configuration, constructor injection, and actuator-driven observability. Idiomatic Spring = annotation-driven, testable, production-ready.

Scope: Spring Boot-specific patterns. For Java: @.agents/skills/java-idioms/SKILL.md.

Dependency Injection

  1. Constructor injection only — never field injection:
    `java
    @Service
    public class TaskService {
    private final TaskRepository repository;
    private final TaskMapper mapper;

    public TaskService(TaskRepository repository, TaskMapper mapper) {
    this.repository = repository;
    this.mapper = mapper;
    }
    }
    `

  2. @ConfigurationProperties over @Value for typed config.

Spring Data JPA

  1. Query methods for simple queries:
    `java
    interface TaskRepository extends JpaRepository<Task, UUID> {
    List<Task> findByStatusOrderByCreatedAtDesc(TaskStatus status);
    @Query("SELECT t FROM Task t WHERE t.priority = :priority AND t.status = 'ACTIVE'")
    List<Task> findActivByPriority(@Param("priority") Priority priority);
    }
    `

  2. Projections for read-only views — avoid loading full entities.
  3. @Transactional on service methods, never on repositories.

REST Controllers

  1. @RestController + DTOs — never expose entities directly:
    `java
    @RestController
    @RequestMapping("/api/v1/tasks")
    public class TaskController {
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public TaskResponse create(@Valid @RequestBody CreateTaskRequest request) {
    return taskService.create(request);
    }
    }
    `

  2. @ControllerAdvice for global exception handling.

Actuator and Observability

  1. Actuator endpoints enabled for health, metrics, info.
  2. Micrometer for custom metrics.
  3. Structured logging with MDC for correlation IDs.

Testing

For universal testing principles, see .agents/rules/testing-strategy.md. Below: language-specific patterns only.

  1. @SpringBootTest for integration, @WebMvcTest for controller slices:
    `java
    @WebMvcTest(TaskController.class)
    class TaskControllerTest {
    @Autowired MockMvc mockMvc;
    @MockBean TaskService taskService;

    @Test
    void createTask_returns201() throws Exception {
    mockMvc.perform(post("/api/v1/tasks")
    .contentType(MediaType.APPLICATION_JSON)
    .content("{\"title\":\"Test\",\"priority\":\"HIGH\"}"))
    .andExpect(status().isCreated());
    }
    }
    `

  2. TestContainers for database integration tests.

Related

  • Java Idioms @.agents/skills/java-idioms/SKILL.md
  • Database Design Principles @.agents/rules/database-design-principles.md
  • API Design Principles @.agents/rules/api-design-principles.md