Spring Initializr
Head to Spring Initializr, the official Spring Boot project generator (honorable mention to Bootify, interesting alternative).
You’ll see a form, don’t panic—we’ll decode each option.

Project: Maven vs Gradle
Spring Boot Versions
When selecting a Spring Boot version, you’ll encounter three types of labels:
- SNAPSHOT
- Indicates a development build of Spring Boot.
 - These versions are unstable, actively being worked on, and may include untested features or bugs.
 - Avoid using them for production, as they can change without notice.
 
 - M1, M2, etc. (Milestones)
- Pre-release versions mark major milestones (e.g., new features) before a stable release.
 - More stable than SNAPSHOT but still not production-ready. Ideal for early testing of upcoming features.
 
 - No Marker (Stable Releases)
- These are stable releases, rigorously tested and production-ready.
 
 
Always opt for the highest stable version (without SNAPSHOT/M labels) unless you explicitly need experimental features.
Project Metadata
The Project Metadata section defines your project’s identity and structure. Here’s a breakdown of each field and its recommended conventions:
| Field | What It Means | Recommended Structure/Standard | Example | 
|---|---|---|---|
| Group | Identifies your organization/team | Use reverse domain name notation. Avoid generic terms | com.acme | 
| Artifact | The project’s name | Use lowercase letters and hyphens for multi-word names | inventory-service | 
| Name | Human-readable display name | Use spaces/capitalization for readability | Inventory Management | 
| Description | Brief summary of the project’s purpose. Added to pom.xml/build.gradle | Keep concise (1–2 sentences) and specific | Microservice for tracking warehouse inventory | 
| Package Name | Root Java package for source code | Derived from Group + Artifact (hyphens removed) | com.acme.inventoryservice | 
Personal preference: I like to use underscore (_) in the artifact name. There’s no rule against it, it's just not common. But I feel it helps to keep consistency, cause Spring Initializr will replace the hyphen with underscore in some folders.
Packaging: JAR vs WAR
Packaging determines how your application is bundled into a single, shareable file, enabling it to run smoothly on any system without complex setup.
| Format | Best For | Key Difference | 
|---|---|---|
JAR | Modern Spring Boot apps, microservices, cloud deployments | Contains embedded server (e.g., Tomcat) for self-contained execution | 
WAR | Legacy apps or deployments to external servers (e.g., traditional Tomcat, JBoss) | Requires a separate server to run; no embedded server included | 
Use JAR unless you’re bound to legacy infrastructure. JAR is the default in Spring Boot. Spring Boot’s embedded server makes JAR the lightweight, hassle-free choice for most projects today.
Java Version
- Stick with what your team uses.
- If your team is using an old unsupported version, go for the lowest version Spring Initializr provides.
 
 - If unsure, pick the latest LTS—it’s the sweet spot.
 
Dependencies
Dependencies are pre-built libraries that add specific features to your app (like tools in a toolbox). For now, we’ll use the ones you’ll need in 90% of real-world Spring projects:
| Dependency | Category | Why You Need It | 
|---|---|---|
| Lombok | Developer Tools | Reduces repetitive code (e.g., getters/setters) with simple annotations | 
| Spring Boot Actuator | Operations/Monitoring | Adds health checks, metrics, and management endpoints for your app | 
| Spring Boot DevTools | Developer Tools | Speeds up development with auto-restarts, LiveReload, and debug-friendly config | 
| Spring Configuration Processor | Developer Tools | Enables code-completion for custom application.properties/yml settings | 
| Spring Web | Web | Build REST APIs with Spring MVC + embedded Tomcat server | 
Generate
Once you’ve configured your Spring Boot app, hit the Generate button (or Ctrl + Enter). Spring Initializr will bundle your project into a .zip file.
In this screenshot down below, I’m creating the Users Manager application that we will develop during the rest of this guide.

What’s inside the zip?
- A standard project structure (folders for code, tests, configs).
 - Preconfigured 
pom.xml(Maven) orbuild.gradle(Gradle). - A starter 
application.propertiesfile. - The main class (
*Application.java) to run your app. 
Don’t worry about the details yet – we’ll unpack and explore everything together in the next steps!