🚀 Spring Boot Multi-Database + JPA Full Notes


📌 1. Overview


⚙️ 2. application.yml

spring:
  datasource:
    db1:
      url: jdbc:mysql://localhost:3306/db1
      username: root
      password: root

    db2:
      url: jdbc:postgresql://localhost:5432/db2
      username: postgres
      password: postgres

🏗️ 3. DataSource Configuration

@Bean
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource db1DataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource db2DataSource() {
    return DataSourceBuilder.create().build();
}

🏭 4. EntityManagerFactory

@Bean
public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(
        EntityManagerFactoryBuilder builder,
        DataSource dataSource) {

    return builder
            .dataSource(dataSource)
            .packages("com.example.db1.entity")
            .persistenceUnit("db1")
            .build();
}

🔁 5. TransactionManager

@Bean
public PlatformTransactionManager db1TransactionManager(
        EntityManagerFactory emf) {

    return new JpaTransactionManager(emf);
}

🧠 6. EntityManager

@PersistenceContext
private EntityManager entityManager;

🧠 7. Persistence Context

EntityManager → Persistence Context → Database

🧠 8. Single DB Flow Diagram

🚀 Spring Boot Application | +------------------------------+ | TransactionManager | +------------------------------+ | ↓ +------------------------------+ | EntityManagerFactory | +------------------------------+ | ----------------------------------------- | | | EntityManager EntityManager EntityManager | | | ↓ ↓ ↓ Persistence Persistence Persistence Context Context Context | | | ↓ ↓ ↓ ----------- Managed Entities ---------- | ↓ DataSource | ↓ Database

🔥 9. Multi-Database Diagram

Spring Boot Application | ----------------------------------------------------- | | TransactionManager(DB1) TransactionManager(DB2) | | EntityManagerFactory(DB1) EntityManagerFactory(DB2) | | EntityManager EntityManager | | Persistence Context(DB1) Persistence Context(DB2) | | Entities(DB1) Entities(DB2) | | DataSource(DB1) DataSource(DB2) | | Database(MySQL) Database(PostgreSQL)

🔄 10. Flow Steps

TransactionManager
        ↓
EntityManagerFactory
        ↓
EntityManager
        ↓
Persistence Context
        ↓
Entities
        ↓
DataSource
        ↓
Database

🧩 11. Entity Example

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;
}

⚠️ 12. Important Rules


💡 13. Best Practices


🎯 14. Final Summary

TransactionManager
        ↓
EntityManagerFactory
        ↓
EntityManager
        ↓
Persistence Context
        ↓
Entities
        ↓
Database