alone use close

This commit is contained in:
yedongfu 2021-05-26 10:07:23 +08:00
parent ef323fd70d
commit 1f52bc4ce9
2 changed files with 23 additions and 15 deletions

View File

@ -3,7 +3,7 @@ package common
import (
"database/sql"
"fmt"
"strings"
"regexp"
"time"
"github.com/sirupsen/logrus"
@ -81,10 +81,15 @@ func GetDsn(conf map[string]string) string {
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local", conf["user"], conf["password"], conf["host"], conf["port"], conf["database"])
}
func ReplaceDsnPassword(dsn string) string {
reg := regexp.MustCompile(`:(.*)@`)
return reg.ReplaceAllString(dsn, "****")
}
func DbGet(conf map[string]string) *MyDb {
dsn := GetDsn(conf)
if dbs[dsn] == nil {
logrus.Printf("connecting %s", strings.Replace(dsn, conf["password"], "****", 1))
logrus.Printf("connecting %s", ReplaceDsnPassword(dsn))
db1, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
})
@ -95,14 +100,25 @@ func DbGet(conf map[string]string) *MyDb {
return dbs[dsn]
}
func DbAlone(conf map[string]string) (*MyDb, *sql.DB) {
logrus.Printf("opening alone mysql: %s", GetDsn(conf))
mdb, err := sql.Open("mysql", GetDsn(conf))
type MyConn struct {
Conn *sql.DB
Dsn string
}
func (conn *MyConn) Close() {
logrus.Printf("closing alone mysql: %s", ReplaceDsnPassword(conn.Dsn))
conn.Conn.Close()
}
func DbAlone(conf map[string]string) (*MyDb, *MyConn) {
dsn := GetDsn(conf)
logrus.Printf("opening alone mysql: %s", ReplaceDsnPassword(dsn))
mdb, err := sql.Open("mysql", dsn)
PanicIfError(err)
gormDB, err := gorm.Open(mysql.New(mysql.Config{
Conn: mdb,
}), &gorm.Config{})
PanicIfError(err)
gormDB.Use(&tracePlugin{})
return &MyDb{DB: gormDB}, mdb
return &MyDb{DB: gormDB}, &MyConn{Conn: mdb, Dsn: dsn}
}

10
xa.go
View File

@ -6,7 +6,6 @@ import (
"strings"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"github.com/yedf/dtm/common"
)
@ -41,7 +40,6 @@ func XaClientNew(server string, mysqlConf map[string]string, app *gin.Engine, ca
common.MustUnmarshal(b, &req)
tx, my := common.DbAlone(xa.Conf)
defer func() {
logrus.Printf("closing conn %v", xa.Conf)
my.Close()
}()
if req.Action == "commit" {
@ -59,13 +57,7 @@ func (xa *XaClient) XaLocalTransaction(gid string, transFunc XaLocalFunc) (rerr
defer common.Panic2Error(&rerr)
branch := common.GenGid()
tx, my := common.DbAlone(xa.Conf)
defer func() {
logrus.Printf("closing conn %v", xa.Conf)
my.Close()
}()
// tx1 := db.Session(&gorm.Session{SkipDefaultTransaction: true})
// common.PanicIfError(tx1.Error)
// tx := common.MyDb{DB: tx1}
defer func() { my.Close() }()
tx.Must().Exec(fmt.Sprintf("XA start '%s'", branch))
err := transFunc(tx)
common.PanicIfError(err)