package datasource import ( "fmt" _ "github.com/go-sql-driver/mysql" "log" "sync" "xorm.io/xorm" "xorm.io/xorm/caches" log2 "xorm.io/xorm/log" "xorm.io/xorm/names" configs2 "xps/cmd/config" ) var ( masterEngine *xorm.Engine slaveEngine *xorm.Engine idDbEngine *xorm.Engine lock sync.Mutex ) func InstanceMaster() *xorm.Engine { if masterEngine != nil { return masterEngine } lock.Lock() defer lock.Unlock() if masterEngine != nil { return masterEngine } c := configs2.MasterDbConfig driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", c.User, c.Pwd, c.Host, c.Port, c.DbName) engine, err := xorm.NewEngine(configs2.DriverName, driveSource) if err != nil { log.Fatal("dbhelper", "DbInstanceMaster", err) return nil } //Debug mode engine.ShowSQL(true) engine.Logger().SetLevel(log2.LOG_DEBUG) //Log engine.SetTZLocation(configs2.SysTimeLocation) //performance cache := caches.NewLRUCacher(caches.NewMemoryStore(), 1000) engine.SetDefaultCacher(cache) masterEngine = engine return engine } // InstanceSlave Slave func InstanceSlave() *xorm.Engine { if slaveEngine != nil { return slaveEngine } lock.Lock() defer lock.Unlock() if slaveEngine != nil { return slaveEngine } c := configs2.SlaveDbConfig driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", c.User, c.Pwd, c.Host, c.Port, c.DbName) engine, err := xorm.NewEngine(configs2.DriverName, driveSource) if err != nil { log.Fatal("dbhelper", "DbInstanceMaster", err) return nil } engine.SetTZLocation(configs2.SysTimeLocation) engine.SetColumnMapper(names.SnakeMapper{}) slaveEngine = engine return engine } // InstanceIDServer Slave func InstanceIDServer() *xorm.Engine { if idDbEngine != nil { return idDbEngine } lock.Lock() defer lock.Unlock() if idDbEngine != nil { return idDbEngine } c := configs2.IDDbConfig driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", c.User, c.Pwd, c.Host, c.Port, c.DbName) engine, err := xorm.NewEngine(configs2.DriverName, driveSource) if err != nil { log.Fatal("dbhelper", "DbInstanceIDServer", err) return nil } engine.SetTZLocation(configs2.SysTimeLocation) idDbEngine = engine return engine }