From cafdb2990dee364284c9d32257bbfd9e86c07ed4 Mon Sep 17 00:00:00 2001 From: boyce Date: Wed, 27 Feb 2019 18:30:14 +0800 Subject: [PATCH] =?UTF-8?q?DBModule=E6=A8=A1=E5=9D=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmodule/DBModule.go | 41 ++++++++++++++++---------- sysmodule/DBModule_test.go | 13 ++++---- sysmodule/HttpClientPoolModule_test.go | 2 +- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/sysmodule/DBModule.go b/sysmodule/DBModule.go index 23fcfb3..13139a1 100644 --- a/sysmodule/DBModule.go +++ b/sysmodule/DBModule.go @@ -24,10 +24,11 @@ const ( type DBModule struct { service.BaseModule db *sql.DB - URL string - UserName string - Password string - DBName string + url string + username string + password string + dbname string + maxconn int syncExecuteFun chan SyncFun syncCoroutineNum int @@ -44,10 +45,23 @@ type DBResult struct { blur bool } -//OnInit ... -func (slf *DBModule) OnInit() error { +func (slf *DBModule) Init(maxConn int, url string, userName string, password string, dbname string) error { + slf.url = url + slf.maxconn = maxConn + slf.username = userName + slf.password = password + slf.dbname = dbname slf.syncExecuteFun = make(chan SyncFun, MAX_EXECUTE_FUN) - return slf.Connect(10) + + return slf.Connect(slf.maxconn) +} + +func (slf *DBModule) OnInit() error { + for i := 0; i < slf.syncCoroutineNum; i++ { + go slf.RunExecuteDBCoroutine() + } + + return nil } //Close ... @@ -234,10 +248,10 @@ func (slf *DBResult) mapSlice2interface(data []map[string]string, in interface{} // Connect ... func (slf *DBModule) Connect(maxConn int) error { cmd := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=%s", - slf.UserName, - slf.Password, - slf.URL, - slf.DBName, + slf.username, + slf.password, + slf.url, + slf.dbname, url.QueryEscape(time.Local.String())) db, err := sql.Open("mysql", cmd) @@ -256,9 +270,7 @@ func (slf *DBModule) Connect(maxConn int) error { db.SetConnMaxLifetime(time.Second * 90) slf.syncCoroutineNum = maxConn - for i := 0; i < slf.syncCoroutineNum; i++ { - go slf.RunExecuteDBCoroutine() - } + return nil } @@ -356,7 +368,6 @@ func (slf *DBModule) RunExecuteDBCoroutine() { select { case <-slf.ExitChan: service.GetLogger().Printf(LEVER_WARN, "stopping module %s...", fmt.Sprintf("%T", slf)) - fmt.Println("stopping module %s...", fmt.Sprintf("%T", slf)) return case fun := <-slf.syncExecuteFun: fun() diff --git a/sysmodule/DBModule_test.go b/sysmodule/DBModule_test.go index d60b192..2603cb1 100644 --- a/sysmodule/DBModule_test.go +++ b/sysmodule/DBModule_test.go @@ -1,6 +1,7 @@ package sysmodule_test import ( + "sync" "testing" "github.com/duanhf2012/origin/sysmodule" @@ -8,14 +9,12 @@ import ( ) func TestDBModule(t *testing.T) { - db := sysmodule.DBModule{ - URL: "192.168.0.5:3306", - UserName: "root", - Password: "Root!!2018", - DBName: "QuantFundsDB", - } - db.Connect(100) + db := sysmodule.DBModule{} + db.ExitChan = make(chan bool) + db.WaitGroup = new(sync.WaitGroup) + db.Init(100, "192.168.0.5:3306", "root", "Root!!2018", "QuantFundsDB") + db.OnInit() res := db.Query("select * from tbl_fun_heelthrow where id >= 1") if res.Err != nil { t.Error(res.Err) diff --git a/sysmodule/HttpClientPoolModule_test.go b/sysmodule/HttpClientPoolModule_test.go index 7089a04..c2f674a 100644 --- a/sysmodule/HttpClientPoolModule_test.go +++ b/sysmodule/HttpClientPoolModule_test.go @@ -10,7 +10,7 @@ import ( func TestHttpClientPoolModule(t *testing.T) { c := sysmodule.HttpClientPoolModule{} - c.Init(10) + c.Init(10, "") rsp := c.Request(http.MethodGet, "https://www.baidu.com/", nil, nil) fmt.Println(rsp.Err)