12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package orm
- import (
- "strings"
- "time"
- "go-common/library/ecode"
- "go-common/library/log"
- xtime "go-common/library/time"
- // database driver
- _ "github.com/go-sql-driver/mysql"
- "github.com/jinzhu/gorm"
- )
- // Config mysql config.
- type Config struct {
- DSN string // data source name.
- Active int // pool
- Idle int // pool
- IdleTimeout xtime.Duration // connect max life time.
- }
- type ormLog struct{}
- func (l ormLog) Print(v ...interface{}) {
- log.Info(strings.Repeat("%v ", len(v)), v...)
- }
- func init() {
- gorm.ErrRecordNotFound = ecode.NothingFound
- }
- // NewMySQL new db and retry connection when has error.
- func NewMySQL(c *Config) (db *gorm.DB) {
- db, err := gorm.Open("mysql", c.DSN)
- if err != nil {
- log.Error("db dsn(%s) error: %v", c.DSN, err)
- panic(err)
- }
- db.DB().SetMaxIdleConns(c.Idle)
- db.DB().SetMaxOpenConns(c.Active)
- db.DB().SetConnMaxLifetime(time.Duration(c.IdleTimeout) / time.Second)
- db.SetLogger(ormLog{})
- return
- }
|