47 lines
1001 B
Go
47 lines
1001 B
Go
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
|
|
}
|