multiple datasources using Spring Boot
This Spring Boot application demonstrates how to work with multiple datasources and implement efficient parallel data fetching.
Features
Multiple database connections (PostgreSQL and MySQL)
Parallel data fetching using CompletableFuture
Database migrations using both Liquibase and Flyway
Exception handling with Problem Details
Virtual Threads support
Swagger API documentation
Architecture
Database Setup
PostgreSQL Database: Stores member information
Managed by Liquibase migrations
Uses sequence-based ID generation
MySQL Database: Stores cardholder information
Managed by Flyway migrations
Uses identity-based ID generation
Key Components
DetailsService: Implements parallel data fetching
Uses CompletableFuture for asynchronous operations
Implements timeout handling (5 seconds)
Provides comprehensive error handling
Data Models:
Member
: Core member information (PostgreSQL)CardHolder
: Card-related information (MySQL)
Exception Handling:
CustomServiceException
: For service-layer errorsMemberNotFoundException
: For missing member scenariosProblem Details support for standardized error responses
Configuration
PostgreSQL Configuration
MySQL Configuration
Getting Started
Start PostgreSQL and MySQL databases
Configure database connections in
application.properties
Run the application: The databases will be automatically initialized
Access Swagger UI: http://localhost:8080/swagger-ui.html
Implementation Notes
Database migrations run automatically on startup
Data bootstrapping occurs via
ApplicationReadyEvent
Parallel data fetching implemented using Spring's @Qualifier("applicationTaskExecutor")
Virtual Threads enabled for improved scalability
HikariCP connection pooling with optimized settings
Automatic commit disabled for better transaction control
API Endpoints
GET /api/details/{memberId}
: Fetches member details from both databases in parallelReturns combined information from both datasource's
Implements timeout handling (5 seconds)
Returns standardized error responses using Problem Details
Testing
Integration tests demonstrate concurrent request handling
MockMvcTester used for API testing
Testcontainers with parallel startup for database testing
Last updated