Backend service for a job recruitment platform, built with Spring Boot 3 and Java 21.
A RESTful API backend for a job recruitment platform providing user management, job postings, candidate tracking, and AI/ML integration for intelligent job recommendations.
- User Management: Registration, login, role-based access (Candidate / Recruiter / Admin)
- Authentication & Authorization: JWT, OAuth2 (Google), Spring Security
- Job Management: CRUD operations, search, filtering by criteria
- Resume Management: Upload/parse CVs, automatic information extraction
- AI/ML Integration:
- Personalized job recommendations (Recommendation Service)
- Semantic search (Search Service)
- CV information extraction (Resume Extractor Service)
- Email Notifications: Account verification, interview scheduling
- Media Storage: Cloudinary integration for avatars and CVs
- Caching: Redis for performance optimization
| Component | Technology |
|---|---|
| Framework | Spring Boot 3.5.6 |
| Language | Java 21 |
| Database | PostgreSQL 18 |
| Cache | Redis 7.4 |
| ORM | Spring Data JPA, Hibernate |
| Migration | Flyway |
| Auth | Spring Security, OAuth2, JWT |
| Spring Mail | |
| Cloud Storage | Cloudinary |
| Build Tool | Maven |
| Container | Docker |
src/main/java/org/toanehihi/jobrecruitmentplatformserver/
├── application/ # Application services, DTOs, mappers
├── domain/ # Entities, repositories, domain logic
├── infrastructure/ # External integrations, configurations
└── interfaces/ # Controllers, REST endpoints
Clean Architecture with distinct layers:
- Domain Layer: Business logic and entities
- Application Layer: Use cases, DTOs
- Infrastructure Layer: Configuration, external integrations
- Interfaces Layer: REST Controllers, API endpoints
- Java 21+
- Maven 3.8+
- Docker & Docker Compose
- PostgreSQL 18+
- Redis 7.4+
-
Clone the repository
git clone <repository-url> cd Job-Recruitment-Platform-Server
-
Configure environment variables
cp .env.example .env # Edit .env with the required values -
Start services
docker-compose up -d
Server runs at:
http://localhost:8080
-
Ensure PostgreSQL and Redis are running
-
Configure environment variables in
.env -
Build and run
./mvnw spring-boot:run
| Variable | Description |
|---|---|
POSTGRES_HOST |
PostgreSQL host |
POSTGRES_PORT |
PostgreSQL port |
POSTGRES_DB |
Database name |
POSTGRES_USERNAME |
Database username |
POSTGRES_PASSWORD |
Database password |
REDIS_HOST |
Redis host |
REDIS_PORT |
Redis port |
JWT_SECRET |
JWT secret key |
CLIENT_ID |
Google OAuth2 Client ID |
CLIENT_SECRET |
Google OAuth2 Client Secret |
MAIL_USERNAME |
SMTP email username |
MAIL_PASSWORD |
SMTP email password (app password) |
CLOUDINARY_NAME |
Cloudinary cloud name |
CLOUDINARY_API_KEY |
Cloudinary API key |
CLOUDINARY_API_SECRET |
Cloudinary API secret |
FRONTEND_URL |
Frontend URL |
NER_SERVICE_URL |
Resume Extractor Service URL |
SEARCH_SERVICE_URL |
Search Service URL |
RECOMMENDATION_SERVICE_URL |
Recommendation Service URL |
POST /api/auth/register- Register accountPOST /api/auth/login- LoginPOST /api/auth/google- Google login
GET /api/jobs- List jobsGET /api/jobs/{id}- Job detailsPOST /api/jobs- Create jobPUT /api/jobs/{id}- Update jobDELETE /api/jobs/{id}- Delete job
GET /api/candidates/profile- Get profilePUT /api/candidates/profile- Update profilePOST /api/candidates/resume- Upload CV
GET /api/recommendations- Get job recommendations
GET /actuator/health- Service health status
docker build -t jrp-server:1.0 .docker run -p 8080:8080 --env-file .env jrp-server:1.0+------------------+ +------------------+
| Frontend |---->| Backend API |
| (Next.js) | | (Spring Boot) |
+------------------+ +--------+---------+
|
+------------+------------+
| | |
+-----+------+ +--+------+ +---+-------+
| Resume | | Search | | Recommend |
| Extractor | | Service | | Service |
+-----+------+ +--+------+ +---+-------+
| | |
+-----+------+ +--+------------+------+
| NER | | Milvus |
| Model | | (Vector DB) |
+------------+ +-----------------------+
- Flyway manages database migrations
- Spring Actuator is integrated for monitoring
- Hot-reload supported via Spring DevTools in development
Developed for educational and research purposes.