-
Notifications
You must be signed in to change notification settings - Fork 1
/
dbInit.go
143 lines (136 loc) · 3.82 KB
/
dbInit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/**
* @Time : 2020/12/17 1:47 下午
* @Author : MassAdobe
* @Description: db
**/
package db
import (
"fmt"
"github.com/MassAdobe/go-gin/logs"
"github.com/MassAdobe/go-gin/nacos"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"go.uber.org/zap"
"os"
"strings"
)
/**
* @Author: MassAdobe
* @TIME: 2020/12/17 1:49 下午
* @Description: 数据库实体类
**/
var (
Read *gorm.DB // 读库
Write *gorm.DB // 写库
)
const (
DB_SQL = "sql"
DB_LOG = "log"
)
/**
* @Author: MassAdobe
* @TIME: 2020/12/17 1:49 下午
* @Description: 初始化数据库
**/
func InitDB() {
if len(nacos.InitConfiguration.Gorm.Read.Ip) != 0 { // 初始化读库
if gg, err := gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
nacos.InitConfiguration.Gorm.Read.Username,
nacos.InitConfiguration.Gorm.Read.PassWord,
nacos.InitConfiguration.Gorm.Read.Ip,
nacos.InitConfiguration.Gorm.Read.Port,
nacos.InitConfiguration.Gorm.Read.Dbname)); err != nil {
logs.Lg.Error("数据库连接", err, logs.Desc("读库连接失败"))
} else {
gg.DB().SetMaxIdleConns(2)
gg.DB().SetMaxOpenConns(10)
gg.Debug()
gg.LogMode(true)
logger := &DbLog{}
gg.SetLogger(logger)
if err := gg.DB().Ping(); err != nil {
logs.Lg.Error("数据库连接", err, logs.Desc("读库初始化失败"))
os.Exit(1)
} else {
logs.Lg.Info("数据库连接", logs.Desc("读库初始化成功"))
Read = gg
}
}
}
if len(nacos.InitConfiguration.Gorm.Write.Ip) != 0 { // 初始化写库
if gg, err := gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
nacos.InitConfiguration.Gorm.Write.Username,
nacos.InitConfiguration.Gorm.Write.PassWord,
nacos.InitConfiguration.Gorm.Write.Ip,
nacos.InitConfiguration.Gorm.Write.Port,
nacos.InitConfiguration.Gorm.Write.Dbname)); err != nil {
logs.Lg.Error("数据库连接", err, logs.Desc("写库连接失败"))
} else {
gg.DB().SetMaxIdleConns(2)
gg.DB().SetMaxOpenConns(10)
gg.Debug()
gg.LogMode(true)
logger := &DbLog{}
gg.SetLogger(logger)
if err := gg.DB().Ping(); err != nil {
logs.Lg.Error("数据库连接", err, logs.Desc("写库初始化失败"))
os.Exit(1)
} else {
logs.Lg.Info("数据库连接", logs.Desc("写库初始化成功"))
Write = gg
}
}
}
}
/**
* @Author: MassAdobe
* @TIME: 2020/12/28 2:29 下午
* @Description: 关停数据库连接池,释放句柄
**/
func CloseDb() {
mark := false
if len(nacos.InitConfiguration.Gorm.Read.Ip) != 0 {
if err := Read.Close(); err != nil {
mark = true
logs.Lg.Error("数据库连接", err, logs.Desc("关闭数据库读库连接池失败"))
}
}
if len(nacos.InitConfiguration.Gorm.Write.Ip) != 0 {
if err := Write.Close(); err != nil {
mark = true
logs.Lg.Error("数据库连接", err, logs.Desc("关闭数据库写库连接池失败"))
}
}
if mark {
return
}
if len(nacos.InitConfiguration.Gorm.Read.Ip) != 0 || len(nacos.InitConfiguration.Gorm.Write.Ip) != 0 {
logs.Lg.Info("数据库连接", logs.Desc("关闭数据库连接池成功"))
}
}
/**
* @Author: MassAdobe
* @TIME: 2020/12/31 1:07 下午
* @Description: 数据库日志实体类
**/
type DbLog struct{}
/**
* @Author: MassAdobe
* @TIME: 2020/12/31 1:07 下午
* @Description: 数据库日志方法
**/
func (logger *DbLog) Print(values ...interface{}) {
switch values[0] {
case DB_SQL:
logs.Lg.Debug(
"数据库日志",
zap.Any("资源", values[1]),
zap.String("执行时间", fmt.Sprintf("%v", values[2])),
zap.String("执行语句", strings.ReplaceAll(values[3].(string), "\n", "")),
zap.String("执行参数", fmt.Sprintf("%v", values[4])),
zap.String("影响行数", fmt.Sprintf("%v", values[5])),
)
case DB_LOG:
logs.Lg.Debug("数据库日志", zap.Any("其他", values[2]))
}
}