A backend journal application built using Spring Boot, focused on clean architecture, modern Spring practices, and real-world backend features.
This project allows users to create and manage journal entries, supports authentication and authorization, integrates caching and messaging, and is structured to be production-ready.
This project was built to practice and demonstrate real-world backend development concepts such as authentication, authorization, asynchronous processing, caching, and clean architecture using Spring Boot and modern backend tools.
- User authentication & authorization (Spring Security + JWT)
- CRUD operations for journal entries
- Role-based access control (Admin / User)
- Swagger / OpenAPI documentation
- Redis caching for performance optimization
- Kafka-based asynchronous processing for background tasks
- Email notifications
- External API integration (Weather API)
- Multiple environment support (dev / test / prod)
The application provides interactive API documentation using Swagger (OpenAPI).
http://localhost:8080/swagger-ui/index.html
- Authenticate using JWT
- Add the token using the Authorize button:
- Authorization: Bearer <JWT_TOKEN>
- Java 17+
- Spring Boot (3.x)
- Spring Security
- Spring Data MongoDB
- Redis
- Apache Kafka
- Maven
- JWT
- Docker (optional)
- Render (deployment-ready)
- Layered architecture (Controller, Service, Repository)
- DTO-based request/response handling
- Stateless authentication using JWT
- Asynchronous event processing using Kafka
- Centralized configuration management
The application supports multiple environments:
application-dev.ymlapplication-test.ymlapplication-prod.yml
Sensitive configuration (credentials, API keys) should be provided using environment variables.
Set the following environment variables or create a .env file:
MONGODB_URI=
JWT_SECRET=
REDIS_URL=
EMAIL_USERNAME=
EMAIL_PASSWORD=
WEATHER_API_KEY=
SENDGRID_API_KEY=
- Email delivery is handled via SendGrid. A valid
SENDGRID_API_KEYis required for email notifications to work.
./mvnw spring-boot:run
Then access:
-
API Base URL: http://localhost:8080
-
Swagger UI: http://localhost:8080/swagger-ui/index.html
The application is deployed on Render and running in production mode.
🔗 Base URL:
https://spring-boot-journal-app.onrender.com
⚠️ Note: This is a backend-only API. Accessing/directly may return a 404 response. Please use the documented API endpoints via Postman or a frontend client.
SPRING_PROFILES_ACTIVE=prod
- Docker
- Render Web Service
- MongoDB Atlas
- Redis Cloud
- SendGrid (Email service)
You can verify the service is running via:
GET /public/health-check
Response: ok