A simple Spring Boot REST API for managing books — built to learn Maven fundamentals.
- Java 25, Spring Boot 4.1.0-RC1
- Maven (profiles, resource filtering, multi-environment)
- JPA / Hibernate with H2 (dev) or PostgreSQL (prod)
- Jakarta Validation for request DTO validation
- JUnit 5 + Mockito + MockMvc for tests
- JDK 25+
- Maven 3.9+
- PostgreSQL (prod profile only)
cd bookstore
mvn spring-boot:runRuns on http://localhost:8080 with an in-memory H2 database.
| Profile | Database | Activation |
|---|---|---|
dev (default) |
H2 (in-memory) | auto |
prod |
PostgreSQL | mvn spring-boot:run -P prod |
- Create a PostgreSQL database and user.
- Copy
application-prod.properties.exampletoapplication-prod.propertiesand fill in your credentials (file is.gitignored). - Set the environment variable
POSTGRES_PASSWORD.
| Method | Path | Description |
|---|---|---|
| POST | /api/books |
Create a book |
| GET | /api/books |
List all books |
| GET | /api/books/{id} |
Get by ID |
| PUT | /api/books/{id} |
Update a book |
| DELETE | /api/books/{id} |
Delete a book |
All POST/PUT bodies must include title, author, isbn, price, and publishedDate.
bookstore/
├── pom.xml
└── src/
├── main/
│ ├── java/com/deba/bookstore/
│ │ ├── BookstoreApplication.java
│ │ ├── controller/BookController.java
│ │ ├── dto/ (CreateBookRequest, BookResponse)
│ │ ├── entity/ Book.java
│ │ ├── exception/ (BookNotFoundException, GlobalExceptionHandler)
│ │ ├── repository/BookRepository.java
│ │ └── service/ BookService.java
│ └── resources/
│ ├── application.properties
│ ├── application-dev.properties
│ └── application-prod.properties.example
└── test/
└── java/com/deba/bookstore/
├── controller/BookControllerTest.java
└── service/BookServiceTest.java
| Command | Purpose |
|---|---|
mvn compile |
Compile source code |
mvn test |
Run tests |
mvn package |
Build JAR |
mvn spring-boot:run |
Run application |
mvn spring-boot:run -P prod |
Run with PostgreSQL |
mvn clean |
Delete target/ |