A robust, enterprise-grade Console Banking Application built with Java 17, focusing on multithreading, data security, and high-performance data processing. This project demonstrates the transition from a simple CRUD application to a scalable system using modern Java design patterns.
- Concurrency & Multithreading: Implemented a background Daemon Watchdog Thread using the
Runnableinterface andvolatilekeyword for real-time high-value transaction monitoring. - Parallel Computing: Utilized Java Parallel Streams (Fork-Join Framework) in the Admin Dashboard to calculate total bank liquidity across all accounts, optimizing for multi-core CPU performance.
- Security: Implemented SHA-256 One-Way Password Hashing to ensure zero-knowledge storage of user credentials.
- Database Integrity: Managed Atomic Transactions (ACID) via JDBC to handle complex money transfers, ensuring data consistency with manual
commitandrollbacklogic. - Functional Programming: Extensive use of the Java Stream API for filtering, sorting, and reducing transaction history.
- File I/O: Integrated a Statement Export Service using
BufferedWriterandFileWriterwith Try-with-Resources for memory-efficient reporting.
The project follows a strict Three-Tier Architecture to ensure Separation of Concerns (SoC):
- Presentation Layer (UI):
ConsoleMenu.java- Handles user interaction and simulated ATM UX (usingThread.sleep). - Service Layer (Business Logic):
BankingService.java,TransactionService.java- Manages the core banking rules, security, and analytical pipelines. - Data Access Layer (Repository):
UserRepository.java,AccountRepository.java- Handles raw SQL interaction with the PostgreSQL (Neon) database.
- Language: Java 17+
- Database: PostgreSQL (Hosted on Neon.tech)
- Build Tool: Maven
- Core Concepts: JDBC, Multithreading, Streams API, File I/O, Password Hashing.
- Secure Authentication: Registration and Login with hashed passwords.
- Account Management: Support for Savings and Current accounts.
- Live ATM Simulation: Interactive withdrawal process with simulated hardware delays.
- Smart History: View transaction history filtered by type (Deposits, Transfers, etc.) sorted by value.
- Statement Download: Export history to a physical
.txtfile.
- Background Watchdog: System-wide alerts for transactions exceeding $5,000.
- Liquidity Report: Instant calculation of total bank assets using parallel processing.
- Clone the Repository:
git clone https://github.com/DhanunjayJ/Java_SpringBoot.git cd Java_SpringBoot/Projects/banking-system - Configure Database:
Update
src/main/java/com/dj/util/DBConnection.javawith your PostgreSQL/Neon credentials. - Build and Run:
mvn clean install mvn exec:java -Dexec.mainClass="com.dj.App"
- Migration to Spring Boot & Spring Data JPA.
- Implementation of Unit Testing with JUnit 5 and Mockito.
- Building a REST API layer for web integration.
Author: Dhanunjay J
Focus: Backend Engineering | Java | High-Performance Systems