Backend · Cursor
Spring Boot 4 & Java 25 Cursor Rules (.mdc)
Generate Spring Boot 4 and Java 25 Cursor rules enforcing record DTOs, virtual threads, jakarta.* namespaces, HTTP service clients, and Spring Data JPA standards.
- Path
- .cursor/rules/spring-boot-4.mdc
- Loads
- Glob pattern match
- Format
- Frontmatter MDC (.mdc)
- Used by
- Cursor
What this file tells the agent
Spring Boot 4 runs on Spring Framework 7 and Jakarta EE 11 (jakarta.* packages only), moves to Jackson 3, and adds API versioning and HTTP service clients. Models trained on legacy Java code often write javax.persistence imports, Lombok boilerplate instead of records, and WebSecurityConfigurerAdapter classes.
- Use jakarta.* packages for persistence, validation, and servlets; ban legacy javax.* imports.
- Represent immutable request/response DTOs using native Java Records with Jakarta validation annotations.
- Enable virtual threads (spring.threads.virtual.enabled=true) for high-throughput blocking I/O.
- Configure Spring Security using the modern SecurityFilterChain bean approach; never extend deprecated WebSecurityConfigurerAdapter.
- Avoid N+1 queries in Spring Data JPA: use @EntityGraph or JOIN FETCH JPQL queries for relational fetches.
Code to avoid, and what to write instead
The rule steers the agent away from the left and toward the right.
// Discouraged: Legacy javax namespace, verbose POJO with setters, mutable entity exposure
import javax.persistence.*; // Obsolete since Spring Boot 3; use jakarta.persistence
public class BadOrderDTO {
private String customerId;
public void setCustomerId(String id) { this.customerId = id; }
}package com.example.demo.order;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Positive;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
public record CreateOrderRequest(
@NotBlank String customerId,
@Positive BigDecimal amount
) {}
public record OrderResponse(Long id, String customerId, BigDecimal amount) {}
@RestController
@RequestMapping("/api/v1/orders")
public class OrderController {
private final OrderService orderService;
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
@PostMapping
public ResponseEntity<OrderResponse> create(@RequestBody CreateOrderRequest request) {
OrderResponse response = orderService.processOrder(request);
return ResponseEntity.ok(response);
}
}Install it in one command
- 01
Go to your project root
The file goes at .cursor/rules/spring-boot-4.mdc, relative to the root.
- 02
Download the file
Run the command on the right. It downloads this preset and writes the file.
- 03
Make sure it gets used
Cursor picks up rules in .cursor/rules/ automatically. This one attaches when files matching its globs are in the request, or when you @-mention it.
$ mkdir -p ".cursor/rules" && curl -fsSL "https://www.devscratchpad.tech/api/raw/cursor-rules/spring-boot-4" -o ".cursor/rules/spring-boot-4.mdc"
writes .cursor/rules/spring-boot-4.mdc
.cursor/rules/spring-boot-4.mdc
To write the file from your own code instead, use Read your code or Convert Legacy Rules in the editor above.
More for Spring Boot 4 & Java 25
Questions
- Does this rulebook support virtual threads?
- Yes, it guides configuration and usage of virtual threads for high-concurrency Spring Boot 4 services.
- Why does it ban javax.* packages?
- Spring Boot 3 and later use Jakarta EE APIs (Jakarta EE 11 in Spring Boot 4); javax.persistence and javax.servlet imports fail to compile.