DBModule模块优化

This commit is contained in:
boyce
2019-02-27 18:30:14 +08:00
parent 29acb70e9e
commit cafdb2990d
3 changed files with 33 additions and 23 deletions

View File

@@ -24,10 +24,11 @@ const (
type DBModule struct { type DBModule struct {
service.BaseModule service.BaseModule
db *sql.DB db *sql.DB
URL string url string
UserName string username string
Password string password string
DBName string dbname string
maxconn int
syncExecuteFun chan SyncFun syncExecuteFun chan SyncFun
syncCoroutineNum int syncCoroutineNum int
@@ -44,10 +45,23 @@ type DBResult struct {
blur bool blur bool
} }
//OnInit ... func (slf *DBModule) Init(maxConn int, url string, userName string, password string, dbname string) error {
func (slf *DBModule) OnInit() error { slf.url = url
slf.maxconn = maxConn
slf.username = userName
slf.password = password
slf.dbname = dbname
slf.syncExecuteFun = make(chan SyncFun, MAX_EXECUTE_FUN) 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 ... //Close ...
@@ -234,10 +248,10 @@ func (slf *DBResult) mapSlice2interface(data []map[string]string, in interface{}
// Connect ... // Connect ...
func (slf *DBModule) Connect(maxConn int) error { func (slf *DBModule) Connect(maxConn int) error {
cmd := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=%s", cmd := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=%s",
slf.UserName, slf.username,
slf.Password, slf.password,
slf.URL, slf.url,
slf.DBName, slf.dbname,
url.QueryEscape(time.Local.String())) url.QueryEscape(time.Local.String()))
db, err := sql.Open("mysql", cmd) db, err := sql.Open("mysql", cmd)
@@ -256,9 +270,7 @@ func (slf *DBModule) Connect(maxConn int) error {
db.SetConnMaxLifetime(time.Second * 90) db.SetConnMaxLifetime(time.Second * 90)
slf.syncCoroutineNum = maxConn slf.syncCoroutineNum = maxConn
for i := 0; i < slf.syncCoroutineNum; i++ {
go slf.RunExecuteDBCoroutine()
}
return nil return nil
} }
@@ -356,7 +368,6 @@ func (slf *DBModule) RunExecuteDBCoroutine() {
select { select {
case <-slf.ExitChan: case <-slf.ExitChan:
service.GetLogger().Printf(LEVER_WARN, "stopping module %s...", fmt.Sprintf("%T", slf)) service.GetLogger().Printf(LEVER_WARN, "stopping module %s...", fmt.Sprintf("%T", slf))
fmt.Println("stopping module %s...", fmt.Sprintf("%T", slf))
return return
case fun := <-slf.syncExecuteFun: case fun := <-slf.syncExecuteFun:
fun() fun()

View File

@@ -1,6 +1,7 @@
package sysmodule_test package sysmodule_test
import ( import (
"sync"
"testing" "testing"
"github.com/duanhf2012/origin/sysmodule" "github.com/duanhf2012/origin/sysmodule"
@@ -8,14 +9,12 @@ import (
) )
func TestDBModule(t *testing.T) { func TestDBModule(t *testing.T) {
db := sysmodule.DBModule{ db := sysmodule.DBModule{}
URL: "192.168.0.5:3306", db.ExitChan = make(chan bool)
UserName: "root", db.WaitGroup = new(sync.WaitGroup)
Password: "Root!!2018",
DBName: "QuantFundsDB",
}
db.Connect(100)
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") res := db.Query("select * from tbl_fun_heelthrow where id >= 1")
if res.Err != nil { if res.Err != nil {
t.Error(res.Err) t.Error(res.Err)

View File

@@ -10,7 +10,7 @@ import (
func TestHttpClientPoolModule(t *testing.T) { func TestHttpClientPoolModule(t *testing.T) {
c := sysmodule.HttpClientPoolModule{} c := sysmodule.HttpClientPoolModule{}
c.Init(10) c.Init(10, "")
rsp := c.Request(http.MethodGet, "https://www.baidu.com/", nil, nil) rsp := c.Request(http.MethodGet, "https://www.baidu.com/", nil, nil)
fmt.Println(rsp.Err) fmt.Println(rsp.Err)