A hiring manager screening two hundred resumes spends under a minute on your GitHub. Five CRUD apps that all look the same do nothing for you in that minute. One service with tests, migrations, Docker, and a clear README does everything.
This guide is 12 Spring Boot projects that progress from a single CRUD API to genuinely distributed systems, each specified enough to start today, plus the checklist that separates a student project from a professional one. It skips what Spring Boot is; if you’re searching for Java backend projects to build, you already know.
If you’re still learning the framework itself rather than looking for what to build with it, start with the step-by-step Spring Boot learning path and come back here once the fundamentals are solid.
How to Choose Your Next Spring Boot Project
Three questions decide whether a project is worth your time. Does it force you to learn a Spring feature you have never used? Does it have a non-trivial data model, at least three related entities? And can you explain a design decision in it for five minutes without notes?
The anti-pattern to name directly: building five projects that are the same CRUD app with different nouns. A Student Management System, an Employee Management System, and a Library Management System are one project, not three. Depth beats breadth here; three well-built projects outperform ten shallow ones, and this guide recommends picking one from each tier rather than working straight down the list.
The originality signal worth knowing: take a familiar domain and add one hard constraint, concurrency, idempotency, real-time updates, multi-tenancy. That constraint is what you actually talk about in the interview, not the domain itself.
| Your situation | Tier to build | How many | Example picks |
| Final-year student or fresher, no backend experience | Tier 1 | Two projects | Task manager, then the library system |
| Fresher targeting product companies | Tier 1 and Tier 2 | One each | Finance tracker, then the auth platform |
| 1 to 3 YOE service-company engineer switching to product | Tier 2 and Tier 3 | One each | Order/inventory service, then the microservices e-commerce build |
| 3+ YOE targeting senior backend | Tier 3 only | One, deep | The saga pattern project, built properly |
For how project choice maps to what reviewers actually screen for, see backend developer skills employers actually screen for.
Transform Your Career
Choose from our industry-leading programs designed for career success
Modern Software and AI Engineering Program
Master full-stack development with AI integration
+1000 more
Modern Data Science and ML with specialisation in AI
Advanced data science techniques with AI specialization
+1000 more
Advanced AIML with Specialisation in Agentic AI
Deep dive into AIML with focus on Agentic systems
+1000 more
DevOps, Cloud & AI Platform Engineering
Build and manage AI-powered cloud infrastructure
+1000 more
AI Engineering Advanced Certification by IIT-Roorkee
Premier AI engineering certification from IIT-Roorkee
Tier 1: Spring Boot Projects for Beginners
Every project below follows the same format, deliberately: what you build, the Spring concepts it exercises, the supporting stack, difficulty and build time, what it proves to an interviewer, and one level-up that makes it non-generic.
One honest note before this tier: these projects will not get you hired on their own. They exist to make the framework stop feeling like magic. Build one, maybe two, then move up. If your core Java is shaky, Scaler’s free Java course for beginners is worth a detour first.
| Project | Tier | Key concepts | Build time | |
| 1 | Task Management REST API | Beginner | DI, REST, JPA, validation, exception handling | 5 to 7 evenings |
| 2 | Personal Finance Tracker | Beginner+ | JPQL, pagination, profiles, Flyway | 1 week |
| 3 | Library Circulation System | Beginner+ | Relationships, N+1, optimistic locking | 1 to 1.5 weeks |
| 4 | Blogging Platform with Security | Intermediate | JWT, OAuth2, filter chain, RBAC | 2 to 2.5 weeks |
| 5 | URL Shortener with Redis | Intermediate | Caching, rate limiting, Actuator | 1 to 1.5 weeks |
| 6 | Order and Inventory Service | Intermediate+ | Locking, idempotency, state machines | 2 weeks |
| 7 | Document Storage Service | Intermediate | Async, multipart, presigned URLs | 1.5 weeks |
| 8 | Notification Service with Kafka | Intermediate+ | Producers/consumers, DLQ, idempotent consumers | 2 weeks |
| 9 | E-Commerce Microservices | Advanced | Discovery, gateway, Feign, resilience | 3 to 4 weeks |
| 10 | Saga Pattern Transactions | Advanced | Choreography, outbox, eventual consistency | 3 weeks |
| 11 | Observability Suite | Advanced | Actuator, Prometheus, tracing | 2 weeks |
| 12 | Real-Time Tracking with WebFlux | Advanced | Reactor, R2DBC, SSE, backpressure | 2 to 3 weeks |
- Task Management REST API
What you build: a task tracker with full REST CRUD over tasks, projects, labels, due dates, and status transitions. Single service, single database.
Spring concepts: constructor-based dependency injection; @RestController with correct HTTP verbs and status codes; Spring Data JPA repositories and derived query methods; Bean Validation (@NotBlank, @Future, @Valid) on request DTOs, never entities, at the boundary; global exception handling with @ControllerAdvice and @ExceptionHandler; @Transactional on service methods.
Supporting stack: PostgreSQL or MySQL, Maven, Lombok, H2 for tests.
Difficulty: Beginner. Build time: 5 to 7 evenings.
Proves: you can lay out controller, service, and repository layers and return correct status codes, not 200 OK for everything.
Level-up: implement soft deletes and an audit trail via JPA auditing (@CreatedDate, @LastModifiedBy), the first thing that distinguishes this from a tutorial clone.
- Personal Finance Tracker with Reporting API
What you build: income and expense records with categories, budgets, and aggregation endpoints, monthly spend by category, budget-vs-actual, top merchants.
Spring concepts: JPQL and native queries for aggregation; Pageable and Sort for pagination; profiles (application-dev.yml vs application-prod.yml) so config isn’t hard-coded; Flyway migrations from day one; a @Scheduled job generating a monthly summary.
Supporting stack: PostgreSQL, Flyway, basic Micrometer.
Difficulty: Beginner+. Build time: 1 week.
Proves: you can write queries beyond findAll(), and understand schema changes need version control. If your JPQL here is guesswork, that’s usually a SQL gap; our SQL learning path closes it.
Level-up: add CSV import of a bank statement with row-level validation and a partial-failure report, a genuinely realistic backend problem.
- Library Circulation System
What you build: books, copies, members, loans, reservations, fines. The most cliched project on every competitor list, reclaimed by specifying the part they all skip.
Spring concepts: @OneToMany, @ManyToOne, @ManyToMany with correct fetch types; the N+1 query problem and fixing it with @EntityGraph or JOIN FETCH; transaction boundaries; optimistic locking with @Version so two members cannot borrow the last copy simultaneously.
Supporting stack: PostgreSQL, Hibernate statistics enabled for query counting. A shaky grip on collections or generics while modelling these entities is worth shoring up against Java fundamentals first.
Difficulty: Beginner+. Build time: 1 to 1.5 weeks.
Proves: you understand ORMs generate SQL, and concurrent writes are a correctness problem, not a performance one.
Level-up: log the query count per request and show a before/after N+1 fix in your README. This one artefact is worth more in an interview than three additional projects.
Tier 2: Intermediate Spring Boot Projects (Production Concerns)
Tier 1 was about the framework. Tier 2 is about what appears the moment software has real users: authentication, caching, concurrency, files, asynchronous work. These map to the middle third of the Java backend developer roadmap if you want the fuller sequence.
- Multi-Tenant Blogging Platform with Spring Security, JWT, and OAuth2
This is the most important project on the list. jwt authentication spring boot gets real search volume at essentially zero competition, and Spring Security is the single topic Java candidates most reliably fumble in Indian interviews.
What you build: a content platform with registration, login, refresh tokens, author/editor/admin roles, per-resource ownership checks, and “sign in with Google.”
Spring concepts, worth specifying in full since they’re the section’s value: the Spring Security filter chain and where a custom JWT filter sits in it, tracing filter to AuthenticationManager to UserDetailsService to SecurityContext; SecurityFilterChain bean configuration using the Spring Boot 3.x lambda DSL, not the deprecated WebSecurityConfigurerAdapter; access versus refresh tokens, signing algorithm choice, expiry strategy, why JWTs should not sit in browser localStorage, and what revocation actually requires, since a JWT cannot be un-issued, only denylisted or given a short expiry; password hashing with BCryptPasswordEncoder, never hand-rolled; role-based access via @PreAuthorize/@PostAuthorize method security plus URL-level rules, and the real difference between the two; OAuth2 login with Google via spring-boot-starter-oauth2-client; and CORS versus CSRF, specifically why CSRF protection is disabled for stateless token APIs and why that is not the same as “CSRF doesn’t matter.”
Supporting stack: PostgreSQL, Redis for the refresh-token store and denylist, Docker Compose.
Difficulty: Intermediate. Build time: 2 to 2.5 weeks. It will feel disproportionately hard relative to its scope. That is the point.
Proves: you can secure an API without copying a Stack Overflow config you cannot explain. Interviewers probe this by asking you to trace one authenticated request through the filter chain; if you built this, you can.
Level-up: add per-tenant data isolation and demonstrate that tenant A cannot read tenant B’s posts even with a valid token.
Common mistakes worth avoiding here: permitting all endpoints during development and forgetting to lock them down; putting roles inside the JWT and never re-validating them server-side; reusing the same signing secret across environments; committing the signing key to Git.
- URL Shortener with Redis Caching and Rate Limiting
What you build: short-code generation, redirect resolution, click analytics, per-API-key rate limits.
Spring concepts: the Spring Cache abstraction (@Cacheable, @CacheEvict) backed by Redis; the cache-aside pattern and TTL choice; a custom OncePerRequestFilter or Bucket4j for rate limiting; Actuator endpoints and custom Micrometer counters for hit/miss ratio.
Supporting stack: Redis, PostgreSQL, Docker Compose.
Difficulty: Intermediate. Build time: 1 to 1.5 weeks.
Proves: you understand read-heavy workloads and can justify a cache with measurements rather than vibes.
Level-up: publish a small benchmark in the README, p99 latency with and without the cache. Numbers in a README are rare and memorable.
- Order and Inventory Service with Real Concurrency
What you build: cart to order to payment-intent to fulfilment, over shared inventory that multiple users compete for.
Spring concepts: transaction propagation and isolation levels; pessimistic locking (@Lock(PESSIMISTIC_WRITE)) versus optimistic locking, and when each is correct; idempotency keys so a retried order doesn’t double-charge; an order-status state machine with illegal-transition guards; @Scheduled cleanup of expired reservations.
Supporting stack: PostgreSQL, Redis for the idempotency-key store, JMeter or k6 to prove the race condition exists before you fix it.
Difficulty: Intermediate+. Build time: 2 weeks.
Proves: you can reason about correctness under concurrency, the line between a coder and an engineer.
Level-up: write a test that reliably reproduces overselling with 50 concurrent threads, then show it passing once the lock is added.
- Document Storage Service with Asynchronous Processing
What you build: upload, store, tag, search, and share files, with thumbnail or metadata extraction happening off the request thread.
Spring concepts: multipart upload handling and streaming large files without loading them fully into memory; @Async with a properly configured TaskExecutor, and why the default executor is a trap; presigned URLs so downloads bypass your service; @ConfigurationProperties for typed config.
Supporting stack: MinIO or AWS S3, PostgreSQL, Docker.
Difficulty: Intermediate. Build time: 1.5 weeks.
Proves: you know not everything belongs in the request-response cycle, and files do not belong in a database.
Level-up: enforce per-user storage quotas and handle the partial-upload failure case cleanly.
- Event-Driven Notification Service with Kafka
What you build: a service consuming domain events (order placed, password reset, payment failed) and dispatching email, SMS, or push through pluggable channels with templating.
Spring concepts: Spring for Apache Kafka producers and consumers; consumer groups and partitioning; retry with backoff and a dead-letter topic; the strategy pattern behind a NotificationChannel interface; @ConditionalOnProperty to toggle channels per environment.
Supporting stack: Kafka via Docker Compose, PostgreSQL for delivery audit, Thymeleaf or Freemarker for templates.
Difficulty: Intermediate+. Build time: 2 weeks.
Proves: you can build asynchronous, decoupled services, the bridge into microservices.
Level-up: make consumers idempotent with an event-ID ledger, and demonstrate replaying the same event doesn’t double-send.
Tier 3: Spring Boot Microservices Projects
Most “microservices projects” on the internet are a monolith split into three folders. A project only counts as distributed if services own separate databases, communicate over the network, and can fail independently.
The caveat competitors never state: freshers do not need microservices for a first job, and a badly built microservices project is worse than a well-built monolith. Build this tier once you can already explain why you would not use microservices for a given problem. What follows maps onto the system design roadmap, since distributed design decisions are exactly what a system-design interview probes.
| Monolith | Genuine microservices | |
| Database | One shared schema | One per service, no shared tables |
| Deployment | One artifact, one process | Independently deployable services |
| Failure mode | The whole app is down or up | One service can fail while others keep working |
| Communication | In-process method calls | Network calls, with retries and timeouts to handle |
| Right for | Most first jobs, most Tier 1/2 work | Once you can justify the operational cost |
- E-Commerce Microservices with Service Discovery, Gateway, and Resilience
What you build: Product, Order, and Payment services, each with its own schema, fronted by a single gateway, discovering each other dynamically.
Spring concepts: Netflix Eureka or Consul for service discovery and client-side load balancing; Spring Cloud Gateway for routing, path rewriting, and centralised JWT validation; OpenFeign declarative clients for service-to-service calls; Resilience4j circuit breaker, retry, bulkhead, and timeout with a sensible fallback; Spring Cloud Config for externalised configuration.
Supporting stack: PostgreSQL per service, Docker Compose for the whole topology.
Difficulty: Advanced. Build time: 3 to 4 weeks.
Proves: you can operate a system where the network is unreliable, precisely what Indian enterprise and services interviews probe.
Level-up: kill the Payment service container while placing an order and show the circuit breaker opening, then closing on recovery. Record it as a GIF in the README.
Interview signals worth preparing: what happens when the gateway is up but discovery is down; why you validate the token at the gateway and defend the services behind it too; the difference between retry and circuit breaking, and why retrying without a circuit breaker can worsen an outage.
10. Distributed Transaction Handling with the Saga Pattern
What you build: order, payment, and inventory as a choreographed saga over Kafka, with compensating transactions when any step fails.
Spring concepts: why @Transactional cannot span services; choreography versus orchestration sagas; the transactional outbox pattern, so a database write and an event publish cannot diverge; idempotent consumers; eventual consistency, and how to expose an in-progress state honestly.
Supporting stack: Kafka, PostgreSQL per service, Debezium optional for change-data capture.
Difficulty: Advanced. Build time: 3 weeks.
Proves: you understand the actual hard problem in microservices. Very few candidates at any level can whiteboard a saga.
Level-up: force a failure at the inventory step and demonstrate the compensating refund executing end to end.
11. Observability-First Service Suite
What you build: not a new domain, instrument the Tier 3 system you already have so you can answer “why was that request slow?”
Spring concepts: Spring Boot Actuator health, liveness and readiness probes, /metrics, /info; Micrometer custom metrics and timers; Prometheus scraping and Grafana dashboards; distributed tracing with Micrometer Tracing plus Zipkin or Tempo, and trace propagation across services; structured JSON logging with correlation IDs; and, critically, securing Actuator endpoints, which most tutorials leave wide open.
Supporting stack: Prometheus, Grafana, Zipkin or Tempo, Docker Compose. If Docker is new, our Docker roadmap covers the containerisation this tier assumes.
Difficulty: Advanced. Build time: 2 weeks.
Proves: production maturity, the line between someone who has deployed software and someone who has only written it.
Level-up: include a Grafana screenshot and one trace waterfall in your README, showing a latency problem you actually found and fixed.
12. Real-Time Tracking Service with Spring WebFlux
What you build: live location or status streaming, delivery tracking, a match ticker, or an IoT telemetry feed, pushed to clients as events occur.
Spring concepts: Spring WebFlux and Project Reactor (Mono, Flux); non-blocking R2DBC instead of JDBC, and why mixing blocking JDBC into a reactive chain destroys the benefit; Server-Sent Events for server-push; backpressure; WebClient for reactive downstream calls.
Supporting stack: PostgreSQL with R2DBC, Redis pub/sub, k6 for load testing.
Difficulty: Advanced. Build time: 2 to 3 weeks.
Proves: you can articulate when reactive is worth its complexity, and when it is not.
Level-up: load-test the same endpoint in both Spring MVC and WebFlux, publish the throughput and thread-count comparison, and state honestly which you’d ship. With Java 21 virtual threads now available, the reactive-versus-imperative calculation has genuinely shifted; a candidate concluding “MVC was fine for this workload” impresses more than one defaulting to reactive out of habit.
The Portfolio Checklist: What Makes Employers Respect a Project
A reviewer cannot assess your business logic in 60 seconds. They assess the shape of your repository, because the shape predicts how you’ll behave on their codebase. Every practice below is a proxy signal for that.
| Practice | Why it signals seniority | How to add it to any project here |
| Layered architecture | Separates transport from business logic; a reviewer can navigate without a guide | Move all logic out of controllers; controllers only validate, delegate, and map responses |
| DTOs, never entities, at the API boundary | Prevents leaking your schema and lazy-loading bugs into JSON | Add request/response records per endpoint; map with MapStruct or a hand-written mapper |
| Global exception handling | Consistent error responses instead of raw stack traces | One @ControllerAdvice returning a standard error body with code, message, timestamp |
| Bean Validation on all input | Shows you assume input is hostile | @Valid on request bodies plus custom constraints for domain rules |
| Tests: JUnit 5, Mockito, Testcontainers | The strongest single signal of professional habit; most student projects have zero | Unit-test services with Mockito; integration-test repositories and controllers against a real database via Testcontainers |
| API docs (OpenAPI/Swagger UI) | Makes your API explorable in 30 seconds without reading code | Add springdoc-openapi, annotate operations, screenshot Swagger UI in the README |
| Database migrations (Flyway or Liquibase) | Proves schema is versioned code, not ddl-auto: update | Add Flyway from commit one; never ship hibernate.ddl-auto=update |
| Containerisation | The difference between “looked at” and “tried” | A multi-stage Dockerfile plus a Compose file bringing up the app, database, and dependencies |
| Configuration and secrets hygiene | Shows you’ve thought about environments | Spring profiles, env-var overrides, a .env.example, zero credentials in Git |
| Observability | Signals deployment experience | Enable Actuator, expose health and metrics, secure the sensitive endpoints |
| A README that explains decisions | The most-read file in your repo | Problem, architecture diagram, how to run, API summary, a design-decisions-and-trade-offs section |
| Meaningful commit history | Shows how you work, not just what you produced | Small, descriptive commits, never one “final project” commit |
Practical tips: pin a maximum of three repositories on your GitHub profile, and delete or archive tutorial-clone repos. Put a live Swagger link or deployed URL at the top of the README; if you can’t deploy it, a 60-second demo GIF is the next best thing.
The blunt version: an interviewer who opens your repo and finds ddl-auto: update, no tests, and entities returned directly from controllers has learned everything they need in 40 seconds. Fixing those three things costs a weekend and changes the outcome. A backend service also reads as more credible with even a thin UI in front of it; our guide on full-stack projects that build a job-ready resume covers that pairing.
Scaler Placement Report and Statistics
Scaler learners achieved 2.5x salary growth with average post-Scaler CTC reaching ₹23L.
Where Spring Boot Is Actually Hired in India
Search volume for "spring boot projects" itself is modest. That says nothing about demand for the skill; people hiring Spring Boot developers aren't googling project ideas, they're posting job requirements. NASSCOM's Strategic Review puts India's direct tech-sector employment at close to 6 million for FY26, with a net addition of roughly 135,000 jobs, a measured, not explosive, pace reflecting AI-driven productivity gains rather than a shrinking market.
The market segments into a few distinct buyers. IT services and consulting, TCS, Infosys, Wipro, HCLTech, Tech Mahindra, Accenture, Cognizant, Capgemini, carry the largest volume of Java and Spring roles, heavy on maintaining and migrating enterprise systems. BFSI treats Java and Spring as the default for transactional systems where correctness, auditability, and compliance dominate; Tier 2 projects 6 and 10 map directly onto this world. Global capability centres are the fastest-growing segment per NASSCOM's own reporting, running substantial Java estates for retail, banking, and healthcare multinationals. Product companies in commerce, food delivery, travel, and edtech round this out, running Spring Boot commonly in order, payment, inventory, and catalogue services.
On pay: fresher Java offers at IT services firms typically sit around ₹3.5 to 5 LPA, with Spring Boot and REST API skills, or a product-company offer, pushing that closer to ₹6 to 10 LPA. Mid-level engineers split sharply by employer type, roughly ₹8 to 14 LPA staying at a services firm versus ₹14 to 22 LPA at a product company or GCC for comparable experience, and senior engineers and architects cross ₹55 LPA at the top end. These are directional bands from current salary trackers, not a guarantee, and they move; check a current source before relying on one. For a wider baseline, see software developer salary trends in India, and for how these projects map onto career levels, how SDE-1, SDE-2, and SDE-3 differ is useful, since Tier 3 here targets the SDE-2 conversation, not the fresher one.
The honest case for the stack: the installed base of enterprise Java is enormous, making demand structural rather than fashionable. Spring Boot 3.x paired with Java 21, virtual threads, records, and pattern matching has closed much of the ergonomics gap with newer stacks. And JVM roles carry a maturity premium, since teams running Java in production usually also run real testing, observability, and release discipline, exactly where a junior engineer's skills compound fastest. The counterweight: entry-level competition is intense precisely because Java is taught almost everywhere in Indian CS curricula, which is exactly why the checklist above matters more in this stack than in most others.
How to Present These Projects in an Interview
Every backend project invites four questions: why did you choose this design, what broke, what would you change at 100 times the traffic, and what did you deliberately leave out. Prepare the fourth one especially; knowing your own scope boundaries reads as senior.
Lead with the constraint, not the CRUD. "I built an order service" is forgettable. "I built an order service where I could reproduce overselling under 50 concurrent threads, then fixed it with pessimistic locking" is not. On your resume, give each project two lines, what it does and the hardest technical decision, link the repo, and never list more than three.
Be ready to be wrong in public. If you chose Kafka where a database table would have done, say so; interviewers reward calibrated self-assessment over defensiveness. Topics your projects here should have prepared you for: the Spring bean lifecycle and scopes, @Transactional propagation and self-invocation pitfalls, JPA fetch strategies and N+1, the Security filter chain, idempotency, circuit-breaker semantics, and the trade-offs behind your saga.
One expectation to set honestly: these projects clear the system-design, experience, and manager rounds. Most companies still gate on a DSA round first, and projects don't replace that; our DSA in Java roadmap covers that separate track.
Common Mistakes That Make a Spring Boot Project Look Amateur
- ddl-auto=update left on in a config meant to look production-ready signals nobody thought about migrations.
- Entities returned straight from controllers leak your schema into your API.
- Business logic sitting in controllers instead of services makes the codebase impossible to navigate.
- Zero tests, or tests that only call assertNotNull, signal no real testing habit.
- Secrets committed to Git are a hard red flag on their own.
- A README that's still the default Spring Initializr text tells a reviewer you didn't finish.
- Catching Exception broadly and returning 200 anyway hides real failures from clients.
- Every field wired with @Autowired directly instead of through the constructor makes a class impossible to unit test cleanly.
- No pagination on a list endpoint that will obviously grow is a scale blind spot.
- One giant application.properties with no profiles means no real environment thinking.
- A "microservices" project where every service shares one database isn't actually microservices.
- And a final commit message reading simply "final" says more about your process than you'd want it to.
Scaler Alumni and Their Success Stories
Also Explore These Projects to Build Your Portfolio
Frequently Asked Questions
What projects should I build to learn Spring Boot?
Start with a REST CRUD API using Spring Data JPA and validation, then add a project with authentication and caching, then one distributed system with multiple services. Depth beats quantity: three well-built projects outperform ten shallow ones.
What is a good Spring Boot project for a beginner?
A task management REST API. It exercises dependency injection, @RestController, Spring Data JPA, Bean Validation, and global exception handling, the core of the framework, in about a week, without needing infrastructure beyond one database.
How many Spring Boot projects should be on my resume?
Two to three, maximum. Reviewers read depth, not count. Each should have tests, API documentation, a Dockerfile, and a README explaining your design decisions.
Are Spring Boot projects enough to get a backend job in India?
Necessary but not sufficient. Most companies still run a DSA round first; projects decide the system-design, experience, and manager rounds. Build for both.
What should a Spring Boot project include to look professional?
Layered architecture, DTOs at the API boundary, global exception handling, JUnit and Testcontainers tests, OpenAPI docs, Flyway migrations, a Dockerfile, Actuator health checks, and a README with an architecture diagram.
What is the difference between a Spring project and a Spring Boot project?
Spring is the underlying framework requiring manual configuration; Spring Boot adds auto-configuration, starter dependencies, and an embedded server so a project runs with almost no boilerplate. Nearly all new Spring work today is Spring Boot.
Which database should I use for a Spring Boot project?
PostgreSQL or MySQL for anything you'll show an employer. Use H2 only for tests. Add Redis when you have a genuine caching or rate-limiting need, not by default.
Should freshers build microservices projects?
Usually not first. A well-built monolith with tests, migrations, and observability impresses more than a poorly built microservices project. Move to microservices once you can explain why you would not use them.
