From eba7a63f4b84b27afe950a5e10d7d602851cece3 Mon Sep 17 00:00:00 2001 From: liangzy Date: Tue, 11 Aug 2020 14:31:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=A4=E9=A1=B9=E4=BC=98=E5=8C=96=201.=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96json=E7=B1=BB=202.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=BB=98=E8=AE=A4=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/db.go | 23 +++++++++++++++-------- db/db_xorm.go | 19 +++++++++++++++++-- response/json.go | 12 ++++++++---- response/xml.go | 40 ++++++++++++++++++++++++++++++++++++++++ response/xml_test.go | 14 ++++++++++++++ 5 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 response/xml_test.go diff --git a/db/db.go b/db/db.go index 99d4858..a916bd7 100644 --- a/db/db.go +++ b/db/db.go @@ -20,17 +20,24 @@ type dsnConfig struct { } type DbItem struct { - User string `yaml:"user"` - Pass string `yaml:"pass"` - Host string `yaml:"host"` - Port int `yaml:"port"` - Name string `yaml:"name"` - Driver string `yaml:"driver"` - Prefix string `yaml:"prefix"` + User string `yaml:"user"` + Pass string `yaml:"pass"` + Host string `yaml:"host"` + Port int `yaml:"port"` + Name string `yaml:"name"` + Driver string `yaml:"driver"` + Prefix string `yaml:"prefix"` + MaxIdleConns int `yaml:"max_idle_conns"` + MaxOpenConns int `yaml:"max_open_conns"` + ConnMaxLifetime int64 `yaml:"conn_max_lifetime"` + Timeout int `yaml:"timeout"` } func (d *DbItem) Dsn() string { - return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&loc=Local&autocommit=true&timeout=5s", d.User, d.Pass, d.Host, d.Port, d.Name) + if d.Timeout <= 0 { + d.Timeout = 5 + } + return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&loc=Local&autocommit=true&timeout=%ds", d.User, d.Pass, d.Host, d.Port, d.Name, d.Timeout) } func init() { diff --git a/db/db_xorm.go b/db/db_xorm.go index c2912b2..5891592 100644 --- a/db/db_xorm.go +++ b/db/db_xorm.go @@ -45,8 +45,23 @@ func LoadXorm(dsns map[string]dsnConfig) (err error) { tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, cast.ToString(dsn.Item.Prefix)) engine.SetTableMapper(tbMapper) engine.SetLogger(logger) - engine.SetMaxIdleConns(1000) - engine.SetMaxOpenConns(1000) + + if dsn.Item.MaxIdleConns <= 0 { + engine.SetMaxIdleConns(200) + } else { + engine.SetMaxIdleConns(dsn.Item.MaxIdleConns) + } + + if dsn.Item.MaxOpenConns <= 0 { + engine.SetMaxOpenConns(200) + } else { + engine.SetMaxOpenConns(dsn.Item.MaxOpenConns) + } + + if dsn.Item.ConnMaxLifetime > 0 { + engine.SetConnMaxLifetime(time.Second * time.Duration(dsn.Item.ConnMaxLifetime)) + } + engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai") if runmode == "dev" { engine.ShowSQL(true) diff --git a/response/json.go b/response/json.go index 1610556..48f391d 100644 --- a/response/json.go +++ b/response/json.go @@ -3,7 +3,6 @@ package response import ( "bytes" "encoding/json" - "golib.gaore.com/GaoreGo/grlogs" ) const ( @@ -19,9 +18,14 @@ type Json struct { } func (j *Json) String() string { - b, err := json.Marshal(j) - grlogs.Debug(err) - return bytes.NewBuffer(b).String() + s, _ := j.ToString() + return s +} + +func (j *Json) ToString() (str string, err error) { + var b []byte + b, err = json.Marshal(j) + return bytes.NewBuffer(b).String(), err } func NewJsonByDefaultSuccess(data ...interface{}) *Json { diff --git a/response/xml.go b/response/xml.go index d2b701e..7179db5 100644 --- a/response/xml.go +++ b/response/xml.go @@ -1,8 +1,48 @@ package response +import ( + "bytes" + "encoding/xml" + "log" +) + type Xml struct { Code int `xml:"code"` Data interface{} `xml:"data"` Msg string `xml:"msg"` Status bool `xml:"status"` } + +func (x *Xml) String() string { + b, err := xml.MarshalIndent(x, "", " ") + if err != nil { + log.Println("xml encode", err) + } + return xml.Header + bytes.NewBuffer(b).String() +} + +func NewXmlByDefaultSuccess(data ...interface{}) Xml { + return NewXml(true, 0, JsonMsgDefaultOk, data...) +} + +func NewXmlByDefaultFailed(data ...interface{}) Xml { + return NewXml(false, 1, JsonMsgDefaultFailed, data...) +} + +func NewXml(status bool, code int, msg string, data ...interface{}) Xml { + if len(data) > 0 { + return Xml{ + Code: code, + Data: data[0], + Msg: msg, + Status: status, + } + } else { + return Xml{ + Code: code, + Data: nil, + Msg: msg, + Status: status, + } + } +} diff --git a/response/xml_test.go b/response/xml_test.go new file mode 100644 index 0000000..b8068e1 --- /dev/null +++ b/response/xml_test.go @@ -0,0 +1,14 @@ +package response + +import ( + "fmt" + "testing" +) + +type XmlResponse struct { + Xml +} + +func TestNewXmlByDefaultSuccess(t *testing.T) { + fmt.Println(&XmlResponse{Xml: NewXmlByDefaultSuccess()}) +}