on and won’t
switch to sources/replicas based on configuration

But you can specifies which DB to use before starting a transaction, for
example:

    
    
    // Start transaction based on default replicas db  
    tx := db.Clauses(dbresolver.Read).Begin()  
      
    // Start transaction based on default sources db  
    tx := db.Clauses(dbresolver.Write).Begin()  
      
    // Start transaction based on `secondary`'s sources  
    tx := db.Clauses(dbresolver.Use("secondary"), dbresolver.Write).Begin()  
      
  
---  
  
##  Load Balancing

GORM supports load balancing sources/replicas based on policy, the policy
should be a struct implements following interface:

    
    
    type Policy interface {  
      Resolve([]gorm.ConnPool) gorm.ConnPool  
    }  
      
  
---  
  
Currently only the ` RandomPolicy ` implemented and it is the default option
if no other policy specified.

##  Connection Pool

    
    
    db.Use(  
      dbresolver.Register(dbresolver.Config{ /* xxx */ }).  
      SetConnMaxIdleTime(time.Hour).  
      SetConnMaxLifetime(24 * time.Hour).  
      SetMaxIdleConns(100).  
      SetMaxOpenConns(200)  
    )  
      
  
---  
  
[ ![GitHub tag \(latest SemVer\)](https://img.shields.io/github/v/tag/go-
gorm/gorm?label=Latest GORM Release&color=red&&style=for-the-
badge&logo=go&logoColor=red) ](v2_release_note.html)

Last updated: 2024-04-13  [ __ Prev  ](settings.html "Settings") [ Next  __
](sharding.html "Sharding")

#  Platinum Sponsors __

[ Become a Sponsor! ](/contribute.html#Donations)

#  Gold Sponsors __

[ ![Encore](/sponsors-imgs/encore.png)
](https://www.encore.dev/?utm_source=github&utm_medium=github-gorm-sponsor-
logo&utm_campaign=gorm-20231215 "Encore")

[ ![Incident.io](/sponsors-imgs/incident-io.svg) ](https://incident.io
"Incident.io")

[ Become a Sponsor! ](/contribute.html#Donations)

#  Platinum Sponsors

[ Become a Sponsor! ](/contribute.html#Donations)

#  Gold Sponsors

[ ![Encore](/sponsors-imgs/encore.png)
](https://www.encore.dev/?utm_source=github&utm_medium=github-gorm-sponsor-
logo&utm_campaign=gorm-20231215 "Encore")

[ ![Incident.io](/sponsors-imgs/incident-io.svg) ](https://incident.io
"Incident.io")

[ Become a Sponsor! ](/contribute.html#Donations)

**Contents**

  1. Usage 
  2. Automatic connection switching 
  3. Read/Write Splitting 
  4. Manual connection switching 
  5. Transaction 
  6. Load Balancing 
  7. Connection Pool 

[ Improve this page ](https://github.com/go-
gorm/gorm.io/edit/master/pages/docs/dbresolver.md) Back to Top

**Getting Started** [ Overview ](index.html) [ Declaring Models ](models.html)
[ Connecting to Database ](connecting_to_the_database.html) **CRUD Interface**
[ Create ](create.html) [ Query ](query.html) [ Advanced Query
](advanced_query.html) [ Update ](update.html) [ Delete ](delete.html) [ Raw
SQL & SQL Builder ](sql_builder.html) **Associations** [ Belongs To
](belongs_to.html) [ Has One ](has_one.html) [ Has Many ](has_many.html) [
Many To Many ](many_to_many.html) [ Association Mode ](associations.html) [
Preloading (Eager Loading) ](preload.html) **Tutorials** [ Context
](context.html) [ Error Handling ](error_handling.html) [ Method Chaining
](method_chaining.html) [ Session ](session.html) [ Hooks ](hooks.html) [
Transactions ](transactions.html) [ Migration ](migration.html) [ Logger
](logger.html) [ Generic Database Interface ](generic_interface.html) [
Performance ](performance.html) [ Customize Data Types ](data_types.html) [
Scopes ](scopes.html) [ Conventions ](conventions.html) [ Settings
](settings.html) **Advanced Topics** [ Database Resolver ](dbresolver.html) [
Sharding ](sharding.html) [ Serializer ](serializer.html) [ Prometheus
](prometheus.html) [ Hints ](hints.html) [ Indexes ](indexes.html) [
Constraints ](constraints.html) [ Composite Primary Key
](composite_primary_key.html) [ Security ](security.html) [ GORM Config
](gorm_config.html) [ Write Plugins ](write_plugins.html) [ Write Driver
](write_driver