🔀
Data & Persistence

Multiple DataSources

Connecting to Multiple Databases
💡 Multiple datasources SETUP karna EK RESTAURANT ka DO ALAG SUPPLIER se DEAL karne jaisa hai — VEGETABLES EK SUPPLIER se (PRIMARY database), MEAT DUSRE SE (SECONDARY database). RESTAURANT (application) ko CLEARLY PATA HONA CHAHIYE — KAUN SI CHEEZ KAHA SE MANGWANI hai.

Spring Boot ka AUTO-CONFIGURATION SIRF SINGLE DataSource SCENARIO ke liye OPTIMIZED hai — jab APPLICATION ko MULTIPLE, DIFFERENT DATABASES se CONNECT karna ho (jaise MAIN application database + SEPARATE ANALYTICS database, ya LEGACY system database), MANUAL CONFIGURATION zaroori ho jaati hai.

EK DataSource ko @Primary MARK KIYA jaata hai (DEFAULT choice jab AMBIGUOUS ho). BAAKI SECONDARY DataSources ke liye, @Qualifier se EXPLICITLY SPECIFY karna padta hai. HAR DataSource ke SAATH, ALAG EntityManagerFactory aur TransactionManager bhi CONFIGURE karne padte hain.

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean
    @ConfigurationProperties("app.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("app.datasource.legacy")
    public DataSource legacyDataSource() {
        return DataSourceBuilder.create().build();
    }
}

// application.properties:
app.datasource.primary.url=jdbc:postgresql://main-db/app
app.datasource.legacy.url=jdbc:mysql://legacy-db/oldapp

// Usage — @Qualifier se SPECIFIC DataSource select:
@Repository
public class LegacyReportRepository {
    public LegacyReportRepository(@Qualifier("legacyDataSource") DataSource ds) { }
}
🔀
Multiple datasources SETUP karna EK RESTAURANT ka DO ALAG SUPPLIER se DEAL karne jaisa hai — VEGETABLES EK SUPPLIER se (PRIMARY database), MEAT DUSRE SE (SECONDARY database). RESTAURANT (application) ko CLEARLY PATA HONA CHAHIYE — KAUN SI CHEEZ KAHA SE MANGWANI hai.
1 / 2
⚡ Quick Recap
  • Auto-configuration SIRF single DataSource ke liye — multiple mein MANUAL config
  • @Primary = default choice, @Qualifier = specific secondary DataSource select
  • Significant complexity add karta hai — SIMPLER alternatives PEHLE CONSIDER karo
Is page mein (2 subtopics)

Jab APPLICATION ko MULTIPLE, DIFFERENT databases se CONNECT karna ho (jaise MAIN database + LEGACY reporting database), EK @Primary DataSource MARK ki jaati hai (DEFAULT), aur SECONDARY DataSources @Qualifier se EXPLICITLY SELECT ki jaati hain.

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean
    @ConfigurationProperties("app.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("app.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
}

MULTIPLE DataSources ke saath, HAR EK ka APNA SEPARATE EntityManagerFactory aur TransactionManager bhi CONFIGURE karna padta hai — Spring Boot ka AUTO-CONFIGURATION SIRF SINGLE DataSource scenario ke liye hai, MULTIPLE DataSources MANUAL Java-config MANGTE hain.

⚠️Common Mistake: Multiple datasources SETUP karна SIGNIFICANT COMPLEXITY add karta hai — AGAR possible ho, EK SINGLE database ke ANDAR, DIFFERENT SCHEMAS use karna, SIMPLER APPROACH hai.