How vvr-vikram/hrms-microservice works
Purpose and topology
This is a Java 17+ Maven multi-module HRMS backend. Six Spring Boot applications form a REST microservice system: Eureka discovery, a gateway, and employee, attendance, leave, and payroll domains. Each business service owns a separate PostgreSQL database/schema boundary.
Key roots: hrms-microservice/pom.xml, hrms-microservice/README.md.
Startup and entry points
Start discovery first, then the gateway and business services. Each module is independently deployable as a Spring Boot JAR with its own configuration:
• Registry: hrms-microservice/eureka-server/src/main/java/com/hrms/eureka/EurekaServerApplication.java
• Edge gateway: hrms-microservice/api-gateway/src/main/java/com/hrms/gateway/ApiGatewayApplication.java
• Business entry points: hrms-microservice/employee-service/src/main/java/com/hrms/employee/EmployeeServiceApplication.java, hrms-microservice/attendance-service/src/main/java/com/hrms/attendance/AttendanceServiceApplication.java, hrms-microservice/leave-service/src/main/java/com/hrms/leave/LeaveServiceApplication.java
Service discovery and edge routing
Eureka (port 8761) is the registry and heartbeat endpoint; all five other applications register there. The API Gateway (port 8080) is the public REST boundary and routes gateway paths to discovered service instances: employees, attendance, leaves, and payroll.
• hrms-microservice/eureka-server/src/main/resources/application.yml
• hrms-microservice/api-gateway/src/main/resources/application.yml
• hrms-microservice/api-gateway/pom.xml
Employee system of record
Employee service (8081) owns employee records and audit logs. Requests flow controller → service/validation → JPA repositories, returning DTOs and translating failures through its global handler. Other domains consume employee-shaped DTOs rather than its persistence entities.
• hrms-microservice/employee-service/src/main/java/com/hrms/employee/controller/EmployeeController.java
• hrms-microservice/employee-service/src/main/java/com/hrms/employee/service/EmployeeService.java
• hrms-microservice/employee-service/src/main/java/com/hrms/employee/entity/Employee.java
Attendance and leave domains
Attendance service (8082) persists daily check-in/check-out records. Leave service (8083) manages leave applications, approval, and balances. Both expose REST controllers, retain local JPA repositories/entities, and include RestTemplate configuration plus employee DTOs, indicating synchronous employee-service integration at the service boundary.
• hrms-microservice/attendance-service/src/main/java/com/hrms/attendance/service/AttendanceService.java
• hrms-microservice/attendance-service/src/main/java/com/hrms/attendance/entity/Attendance.java
• hrms-microservice/leave-service/src/main/java/com/hrms/leave/service/LeaveService.java
• hrms-microservice/leave-service/src/main/java/com/hrms/leave/entity/LeaveApplication.java
• hrms-microservice/leave-service/src/main/java/com/hrms/leave/entity/LeaveBalance.java
Payroll orchestration
Payroll service (8084) owns payroll-slip persistence but depends on employee salary, attendance/workday, and leave/approval data. Payroll generation is therefore the principal cross-service flow: controller → payroll service → synchronous REST retrieval of employee, attendance, and leave DTOs → earnings/deduction/net calculation → local payroll persistence.
• hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/controller/PayrollController.java
• hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/service/PayrollService.java
• hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/entity/Payroll.java
Runtime boundaries and infrastructure
All modules use Maven and Spring Boot; Spring Cloud supplies Eureka and gateway capabilities. PostgreSQL runs locally on configured port 5000, with distinct hrms_employee_db, hrms_attendance_db, hrms_leave_db, and hrms_payroll_db databases. Per-service application.yml files define runtime ports, discovery, security, datasource, and JPA behavior. Security configuration is present in every business service; exception handlers establish each service’s HTTP error boundary.
Main entry points: ApiGatewayApplication.java API gateway · PayrollService.java Payroll service · LeaveService.java Leave service · EmployeeService.java Employee service
Components 18
Edge & Discovery
- Eureka registry · Service registry and heartbeat endpoint on port 8761.
hrms-microservice/eureka-server/src/main/java/com/hrms/eureka/EurekaServerApplication.java - API gateway · Public REST boundary on port 8080.
hrms-microservice/api-gateway/src/main/java/com/hrms/gateway/ApiGatewayApplication.java
Employee Domain
- Employee controller
hrms-microservice/employee-service/src/main/java/com/hrms/employee/controller/EmployeeController.java - Employee service · Validates employee requests and returns DTOs.
hrms-microservice/employee-service/src/main/java/com/hrms/employee/service/EmployeeService.java - Employee records · Employee system-of-record model.
hrms-microservice/employee-service/src/main/java/com/hrms/employee/entity/Employee.java - Employee PostgreSQL · hrms_employee_db; employee records and audit logs.
Attendance Domain
- Attendance service · Daily check-in/check-out REST domain on port 8082.
hrms-microservice/attendance-service/src/main/java/com/hrms/attendance/service/AttendanceService.java - Attendance records
hrms-microservice/attendance-service/src/main/java/com/hrms/attendance/entity/Attendance.java - Attendance PostgreSQL · hrms_attendance_db.
Leave Domain
- Leave service · Leave application, approval, and balance domain on port 8083.
hrms-microservice/leave-service/src/main/java/com/hrms/leave/service/LeaveService.java - Leave applications
hrms-microservice/leave-service/src/main/java/com/hrms/leave/entity/LeaveApplication.java - Leave balances
hrms-microservice/leave-service/src/main/java/com/hrms/leave/entity/LeaveBalance.java - Leave PostgreSQL · hrms_leave_db.
Payroll Domain
- Payroll controller
hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/controller/PayrollController.java - Payroll service · Retrieves cross-service DTOs, calculates earnings, deductions, and net pay.
hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/service/PayrollService.java - Payroll slips
hrms-microservice/payroll-service/src/main/java/com/hrms/payroll/entity/Payroll.java - Payroll PostgreSQL · hrms_payroll_db.
Other components
- REST clients
Connections 27
- REST clients → API gateway: public REST
- API gateway → Eureka registry: discovers routes
- API gateway → Employee controller: routes employees
- API gateway → Attendance service: routes attendance
- API gateway → Leave service: routes leaves
- API gateway → Payroll controller: routes payroll
- Employee service → Eureka registry: registers
- Attendance service → Eureka registry: registers
- Leave service → Eureka registry: registers
- Payroll service → Eureka registry: registers
- Employee controller → Employee service: delegates
- Employee service → Employee records: persists via JPA
- Employee records → Employee PostgreSQL: stored in
- Attendance service → Employee service: REST employee DTOs
- Attendance service → Attendance records: persists via JPA
- Attendance records → Attendance PostgreSQL: stored in
- Leave service → Employee service: REST employee DTOs
- Leave service → Leave applications: persists via JPA
- Leave service → Leave balances: updates
- Leave applications → Leave PostgreSQL: stored in
- Leave balances → Leave PostgreSQL: stored in
- Payroll controller → Payroll service: generates payroll
- Payroll service → Employee service: REST salary DTOs
- Payroll service → Attendance service: REST workday DTOs
- Payroll service → Leave service: REST approval DTOs
- Payroll service → Payroll slips: persists calculated slip
- Payroll slips → Payroll PostgreSQL: stored in