Backend · Copilot Chat, code review, coding agent
Spring Boot 4 & Java 25 GitHub Copilot Instructions
Generate .github/copilot-instructions.md repository rules for Spring Boot 4 & Java 25.
- Path
- .github/copilot-instructions.md
- Loads
- Whole repository
- Format
- Markdown (.md)
- Used by
- Copilot Chat, code review, coding agent
What this file tells the agent
GitHub Copilot adds .github/copilot-instructions.md to Copilot Chat, code review and coding agent requests in the repository. Writing down the Spring Boot 4 & Java 25 conventions there means Copilot's answers and reviews follow your project's patterns instead of generic ones.
- 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 .github/copilot-instructions.md, 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
Copilot Chat, Copilot code review and the coding agent add the file to requests in this repository. It does not change completions as you type.
$ mkdir -p ".github" && curl -fsSL "https://www.devscratchpad.tech/api/raw/copilot-instructions/spring-boot-4" -o ".github/copilot-instructions.md"
writes .github/copilot-instructions.md
.github/copilot-instructions.md
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
- Where should this Copilot instruction file be stored?
- Save it as .github/copilot-instructions.md in your repository. Copilot Chat, Copilot code review and the Copilot coding agent use it; completions as you type do not.
- Does this apply to all team members?
- Yes. Once the file is on the default branch, Copilot uses it for everyone working in the repository.