Day 1 of My Spring Boot Multitenancy Starter: Contexts, Filters, and Auto-Config
After Day 0’s emotional ignition, Day 1 was about structure, clarity, and hands-on bootstrapping.
🎯 Goal
Scaffold the foundational skeleton of a plug-and-play Spring Boot multitenancy starter — just like how Spring Boot itself feels.
🧱 What I Built Today
🧠 Core Concepts Implemented
-
Thread-safe TenantContextHolder using
ThreadLocal
-
Pluggable
TenantResolver
interface (subdomain strategy default) -
TenantFilter
to set/clear context per request -
TenantDefinition
(record) to hold metadata like tenantId, creds, etc. -
TenantRegistry
+InMemoryTenantRegistry
to register and fetch tenants -
TenantRoutingDataSource
to delegate dynamically -
DataSourceFactory
to build isolatedHikariDataSource
s per tenant - Custom YAML props via
HikariTenantPoolProperties
-
Spring Boot AutoConfig:
MultitenancyAutoConfiguration
TenantRegistryAutoConfig
TenantDataSourceAutoConfig
-
@EnableMultitenancy
annotation to wire everything
🧪 Tests Added
- ✅
TenantContextTest
— validate isolation - ✅
TenantContextLeakTest
— simulate misuse - ✅
TenantContextConcurrencyTest
— 100-thread stress test
🧠 What I Learned Today
🔹 Java Concurrency
Built a cheat-sheet on:
ThreadLocal
-
ExecutorService
,CountDownLatch
,AtomicBoolean
🔹 Maven Structuring
- Local publish using
mvn install
- Clean starter module structure
- IDE tricks for IntelliJ Maven +
.iml
🔹 Spring Boot Internals
-
@ImportAutoConfiguration
flow -
AutoConfiguration.imports
mechanism - Clean starter design, Spring-style
📁 Folder Structure
multi-tenant-springboot-starter/
├── pom.xml
├── starter/
│ ├── pom.xml
│ └── src/main/java/org/nirvikalpa/...
│ └── src/test/java/org/nirvikalpa/...
├── demo/ # coming tomorrow
🧭 Next Steps (Day 2 Plan)
- Build a tenant onboarding workflow
- Wire demo app to consume the starter
- Expose
/health
per-tenant endpoint - Reflect in Ego Log #002
🔗 Repo: github link
Thanks for following my journey.
This is more than code — it's my architectural diary.