📌 This repository contains the reference implementation of the application developed step-by-step during the Java Backend Developer Training.
Each subsequent branch adds more functionality on top of the previous one, allowing participants to explore and compare their solutions.
This is a Spring Boot 3 backend application named Appointment Booking System, created as part of hands-on backend development training.
It follows modern architectural and coding practices, including clean code, layered structure, and modular design.
📄 Specification: AppointmentBookingAppDoc.md
The repository grows in complexity and functionality across branches:
| Branch | Description |
|---|---|
main |
Base Spring Boot setup with basic health endpoints |
feature/1-create-new-application |
(Almost) same as main |
feature/2-dataaccess |
Persistence layer with Spring Data JPA and H2, part 1 |
feature/2-dataaccess-repositories |
Persistence layer with Spring Data JPA and H2, part 2 |
feature/3-business-logic |
Service layer and business logic introduced |
feature/4-services |
OpenAPI/Swagger setup for live API documentation and testing |
feature/5-security |
Spring Security integration for basic authentication and authorization |
After starting the application, you can access the following in your browser:
| URL | Available from | Description |
|---|---|---|
| http://localhost:8080/actuator/health | main |
Basic application health check |
| http://localhost:8080/h2-console | feature/2-dataaccess |
In-memory H2 database console |
| http://localhost:8080/swagger-ui/index.html | feature/4-services |
OpenAPI UI for testing and exploring REST API |
- Java 21
- Spring Boot 3
- Maven 3.9+
- JUnit 5 & AssertJ
- H2 Database
- OpenAPI & Swagger UI
- Spring Security
- GitHub Actions for CI/CD
java-backend-developer-app/
├── .github/workflows/ci.yml # CI/CD pipeline configuration
├── .mvn/
│ │ ├── wrapper/maven-wrapper.properties # Maven wrapper properties
│ │ ├── maven.config # Maven configuration options
│ │ └── settings.xml # Custom Maven settings
├── api/openapi.yml # OpenAPI specification for API documentation
├── src/
│ ├── main/
│ │ ├── java/com/example/ # Application source code
│ │ └── resources/ # Configuration files (e.g., application.yml, templates)
│ ├── test/
│ │ ├── java/com/example/ # Unit and integration tests
│ │ └── resources/ # Test-related configurations and test data
├── pom.xml # Maven project configuration and dependencies
└── README.md # Project documentation
Ensure you have the following installed:
- JDK 21
- Maven 3.9+
- Git
To build the project, run:
mvn clean installTo start the application:
mvn spring-boot:runRun all tests with:
mvn testGitHub Actions is used for CI/CD, configured in `.github/workflows/ci.yml`. The pipeline executes on:
- Every push and pull request to `main` and feature branches.
- Runs tests and generates reports.
This reference repo is intended for trainers and mentors to demonstrate completed solutions. 🧑💻 Each training participant works independently in a separate student repository. This repository serves as a working example.
- Create a feature branch for any changes from a particular, possibly smallest "main" feature branch, e.g. 'feature/2-data-access'.
- Ensure the code follows project conventions and is properly tested.
- Open a Pull Request to particular, corresponding "main" feature branch, e.g. 'feature/2-data-access'. Direct pushes are restricted.
- Wait for CI to pass and a review before merging.
- Rebase higher feature branches onto changed one, e.g. if you merged to 'feature/3-business-logic', then you should rebase 'feature/4-services' and 'feature/5-security' to have your changes there as well.
This project is licensed under the terms of the GNU General Public License v3.0.
See the LICENSE file for details.