Spring Boot Cheatsheet
Setup
Use this Spring Boot reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.
Project Generation
Use this Spring Boot programming cheatsheet as a backend developer reference while you build Java REST APIs. For full-stack work, keep the React cheatsheet, SQL cheatsheet, Git cheatsheet, and Python cheatsheet nearby for UI, data, version control, and automation syntax.
Use Spring Initializr or the CLI to scaffold a project.
# Spring CLI (install via SDKMAN or brew) spring init --dependencies=web,data-jpa,postgresql,validation,security \ --build=maven --java-version=21 my-app
Initializr settings: - Project: Maven or Gradle (Kotlin DSL) - Language: Java 21+ (LTS) - Spring Boot: 3.x (latest stable) - Packaging: Jar (default); War only for servlet containers
Maven pom.xml Essentials
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.2</version> </parent> <dependencies> <!-- Web / REST --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- JPA + Hibernate --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Validation (Jakarta Bean Validation) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- PostgreSQL driver --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <!-- Dev Tools (hot reload, disable caching in dev) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- Tests --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
Gradle (build.gradle.kts) Essentials
plugins {
java
id("org.springframework.boot") version "3.3.2"
id("io.spring.dependency-management") version "1.1.5"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-security")
runtimeOnly("org.postgresql:postgresql")
developmentOnly("org.springframework.boot:spring-boot-devtools")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}Main Application Class
package com.example.myapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // = @Configuration + @EnableAutoConfiguration + @ComponentScan public class MyAppApplication { public static void main(String[] args) { SpringApplication.run(MyAppApplication.class, args); } }
@SpringBootApplicationscans the package it lives in and all sub-packages. Put it at the root package.
Common Starters Reference
| Starter | Brings In |
|---|---|
spring-boot-starter-web | Spring MVC, Tomcat, Jackson |
spring-boot-starter-webflux | Project Reactor, Netty (reactive) |
spring-boot-starter-data-jpa | Hibernate, Spring Data |
spring-boot-starter-data-mongodb | MongoDB driver, Spring Data Mongo |
spring-boot-starter-data-redis | Lettuce, Spring Data Redis |
spring-boot-starter-security | Spring Security filter chain |
spring-boot-starter-oauth2-resource-server | JWT / opaque-token validation |
spring-boot-starter-validation | Hibernate Validator (Jakarta EE) |
spring-boot-starter-actuator | Health, metrics, info endpoints |
spring-boot-starter-mail | JavaMailSender |
spring-boot-starter-cache | Spring Cache abstraction |
spring-boot-starter-aop | AspectJ / Spring AOP |
spring-boot-starter-test | JUnit 5, Mockito, AssertJ, MockMvc |
Running the Application
# Maven ./mvnw spring-boot:run # Gradle ./gradlew bootRun # Fat JAR ./mvnw package java -jar target/my-app-0.0.1-SNAPSHOT.jar # Override properties at runtime java -jar my-app.jar --server.port=9090 --spring.profiles.active=prod
Project Structure Convention
src/
main/
java/com/example/myapp/
MyAppApplication.java ← root (place @SpringBootApplication here)
controller/ ← @RestController classes
service/ ← @Service classes
repository/ ← @Repository / JPA interfaces
model/ ← @Entity + DTO classes
config/ ← @Configuration classes
exception/ ← custom exceptions + @ControllerAdvice
resources/
application.properties ← (or application.yml)
application-dev.properties
application-prod.properties
static/ ← served at "/"
templates/ ← Thymeleaf / Mustache
test/
java/com/example/myapp/ ← mirrors main structureAuto-configuration Gotchas
- Auto-config fires only when a class/bean is not already defined — define your own bean to override.
- Check what was configured:
--debugflag prints a conditions report. - Exclude specific auto-config:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class). spring-boot-devtoolsis not included in the fat JAR by default (optional=true).