A backend practice project built with Java 17, Spring Boot 3, Oracle DB, and MyBatis, including JWT-based authentication, RESTful APIs, Spring Batch, and MinIO (S3 compatible) integration.
The project provides Docker-based local environments for Oracle XE and MinIO.
This repository is a monolithic backend application created for studying and practicing:
- Spring Boot 3 project structure and modern Java development
- Oracle DB integration using MyBatis (XML mapper style)
- Stateless JWT Authentication using Spring Security
- RESTful API design for multiple business domains
- SQL-based schema and sample data initialization
- File storage integration using MinIO (S3-compatible)
- Basic batch job examples using Spring Batch
Application default endpoint: http://localhost:8090
- Java 17
- Spring Boot 3.x
- Spring Web (REST Controller)
- Spring Security + JWT Authentication
- Spring Validation
- Spring AOP
- Spring Batch
- Oracle XE (via Docker)
- MyBatis (Mapper + XML)
- MinIO (S3-compatible)
- Gradle
- Docker / Docker Compose
- Swagger / Springdoc OpenAPI
- CircleCI (example CI configuration)
The project implements a token-based login system with:
- Stateless session handling
- JWT token generation & validation
- Public endpoints vs secure endpoints
- Custom authentication filter
- POST
/api/v1/auth/login - Request Body:
{
"username": "admin",
"password": "admin1234"
}Or the userid/passwd combination from the SM01 table in the DB (in production)
- Response:
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Add the JWT to the HTTP header for all protected API calls, as follows:
Authorization: Bearer {accessToken}- Swagger UI:
http://localhost:8090/swagger-ui/index.html - OpenAPI:
http://localhost:8090/v3/api-docs
This project includes several sample business modules defined by Oracle SQL scripts inside init/:
Examples include:
- User / Account Management (SM01)
- CRUD operations
- Login credentials stored in Oracle
- MyBatis-based mappings
- Various Service / Code / Reference Tables
- Multiple entities for testing business flows
- Demonstrates mapper XML, DTOs, services, controller design
- Batch Jobs
- Example Spring Batch configurations
- Demonstrates Reader → Processor → Writer flow
- AOP Logging
- Method tracing
- Performance measurement
- Request/response logging
The project supports local S3-style storage using MinIO:
- File upload / download example API
- Configurable bucket name, access key, endpoint URL
- Same pattern used for AWS S3 → easily extendable
Install the following:
- JDK 17
- Docker & Docker Compose
- Gradle
- 4GB+ RAM recommended for Oracle XE Docker container
Also ensure:
- Ports (1521 for Oracle, 9000 for MinIO) are not occupied.
- Your machine has enough memory for Oracle to start properly.
From project root:
docker-compose upThis will start Oracle XE database and MinIO server
Using Gradle wrapper:
./gradlew clean bootRunOr build JAR:
./gradlew clean build
java -jar build/libs/*.jarApp starts at: http://localhost:8090
Swagger UI available at:
http://localhost:8090/swagger-ui/index.html
OpenAPI JSON:
http://localhost:8090/v3/api-docs
Testing Secured Endpoints
-
Login via /auth/login
-
Copy token
-
Click Authorize in Swagger UI
-
Enter:
Bearer {accessToken}