You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1001 B
46 lines
1001 B
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 |
|
}
|
|
|