创建 Engine 组

    或者

    1. _ "github.com/lib/pq"
    2. "xorm.io/xorm"
    3. )
    4. var eg *xorm.EngineGroup
    5. func main() {
    6. var err error
    7. master, err := xorm.NewEngine("postgres", "postgres://postgres:[email protected]:5432/test?sslmode=disable")
    8. return
    9. }
    10. slave1, err := xorm.NewEngine("postgres", "postgres://postgres:[email protected]:5432/test1?sslmode=disable")
    11. if err != nil {
    12. return
    13. }
    14. slave2, err := xorm.NewEngine("postgres", "postgres://postgres:[email protected]:5432/test2?sslmode=disable")
    15. return
    16. slaves := []*xorm.Engine{slave1, slave2}
    17. eg, err = xorm.NewEngineGroup(master, slaves)
    18. }

    创建完成 EngineGroup 之后,并没有立即连接数据库,此时可以通过 eg.Ping() 来进行数据库的连接测试是否可以连接到数据库,该方法会依次调用引擎组中每个Engine的Ping方法。另外对于某些数据库有连接超时设置的,可以通过起一个定期Ping的Go程来保持连接鲜活。EngineGroup 可以通过 eg.Close() 来手动关闭,但是一般情况下可以不用关闭,在程序退出时会自动关闭。

    • NewEngineGroup方法
    • 模式一:通过给定 DriverName,DataSourceName 来创建引擎组,每个引擎使用相同的Driver。每个引擎的 DataSourceNames 是 []string 类型,第一个元素是 Master 的 DataSourceName,之后的元素是 Slave的DataSourceName 。

    • 模式二:通过给定*xorm.Engine,[]*xorm.Engine 来创建引擎组,每个引擎可以使用不同的 Driver。第一个参数为 Master 的 *xorm.Engine,第二个参数为 Slave 的 []*xorm.Engine。 NewEngineGroup 方法,第三个参数为 policies,为 Slave 设定负载策略,该参数将在负载策略章节详细介绍,如示例中未指定,则默认为轮询负载策略。

    1. func (eg *EngineGroup) Master() *Engine

    返回Master数据库引擎

    • Slave方法

    依据给定的负载策略返回一个Slave数据库引擎

    • Slaves方法
      • SetPolicy方法

      设置引擎组负载策略