From 47463cd5fbf915cf854f3eee3311d1a2f84ff1d6 Mon Sep 17 00:00:00 2001 From: "suguo.yao" Date: Fri, 3 Sep 2021 09:41:46 +0800 Subject: [PATCH] =?UTF-8?q?mysql=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- README.md | 11 ++++++++-- go.mod | 15 ++++++++++++++ mysql/mysql.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 go.mod create mode 100644 mysql/mysql.go diff --git a/.gitignore b/.gitignore index f4d432a..93f7791 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,4 @@ # Dependency directories (remove the comment below to include it) # vendor/ - +go.sum diff --git a/README.md b/README.md index 2449697..31fd984 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ -# norm +# 组件应用标准结构定义库 -组件应用标准结构定义库 \ No newline at end of file +#### 概述 +1. 除特殊说明外,正常组件使用时在程序引导时调整用组件的Init进行配置初始化,使用New方法进行组件实例获取。 +#### 组件实现 +* MySQL + > "gorm.io/driver/mysql" + > "gorm.io/gorm" + > "gorm.io/gorm/logger" + > "gorm.io/plugin/dbresolver" \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4bcf31b --- /dev/null +++ b/go.mod @@ -0,0 +1,15 @@ +module myschools.me/suguo/norm + +go 1.17 + +require ( + gorm.io/driver/mysql v1.1.2 + gorm.io/gorm v1.21.14 + gorm.io/plugin/dbresolver v1.1.0 +) + +require ( + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.2 // indirect +) diff --git a/mysql/mysql.go b/mysql/mysql.go new file mode 100644 index 0000000..3c3ad18 --- /dev/null +++ b/mysql/mysql.go @@ -0,0 +1,56 @@ +package mysql + +import ( + "fmt" + "time" + + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/plugin/dbresolver" +) + +var ( + _db *gorm.DB + _conf *Config +) + +type Config struct { + ConnString string + ConnMaxLifetime int64 //ConnMaxLifetime 最大连接时间,单位:小时 + MaxIdleConns int + MaxOpenConns int +} + +//Init mysql初始化 +func Init(conf *Config) { + if conf != nil { + _conf = conf + } +} + +//New 创建实例 +func New() (*gorm.DB, error) { + if _db != nil { + return _db, nil + } + + fmt.Println("again!") + _db, err := gorm.Open(mysql.Open(_conf.ConnString), &gorm.Config{ + SkipDefaultTransaction: true, + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + return nil, err + } + _db.Use( + dbresolver.Register(dbresolver.Config{ + Sources: []gorm.Dialector{mysql.Open(_conf.ConnString)}, + Replicas: []gorm.Dialector{mysql.Open(_conf.ConnString)}, + Policy: dbresolver.RandomPolicy{}, + }).SetConnMaxIdleTime(time.Hour). + SetConnMaxLifetime(time.Duration(_conf.ConnMaxLifetime) * time.Hour). + SetMaxIdleConns(_conf.MaxIdleConns). + SetMaxOpenConns(_conf.MaxOpenConns)) + return _db, nil +}