// InitDbConn 数据库连接
func InitDbConn(){
dbUrl := global.ServerConfig.HisInfo.DBUrl
dbUrl = fmt.Sprintf("%s?%s", dbUrl,"charset=utf8&parseTime=true")
MysqlDB, err := sql.Open("mysql", dbUrl)
if err !=nil{
panic(err)
}
err = MysqlDB.Ping()
if err!=nil{
panic(err)
}
global.MysqlDB = MysqlDB
}
// 服务启动方式
func main() {
global.BasePath = utils.ProjectPath()
defer initialize.InitClose()
initialize.InitConfig() // 初始化配置
initialize.InitLogger() // 初始化日志
initialize.InitDbConn() // 数据库连接
initialize.InitDb() // 数据库连接
fmt.Println(" gorm 连接成功...")
initialize.InitSrvConn() // grpc 连接
fmt.Println(" grpc 连接成功...")
global.Logger.Info("数据库连接成功...")
fmt.Println(" 数据库连接成功...")
global.Logger.Info(fmt.Sprintf("启动服务器,端口:%d", global.Port))
// 注册 interceptor
var opts []grpc.ServerOption
opts = append(opts, grpc.UnaryInterceptor(middleware.Interceptor))
g := grpc.NewServer(opts...)
fee.RegisterGreeterServer(g, &Server{})
grpcDns := fmt.Sprintf("0.0.0.0:%v", global.GrpcPort)
lis, err := net.Listen("tcp", grpcDns)
if err != nil {
panic("failed to listen:" + err.Error())
}
err = g.Serve(lis)
if err != nil {
panic("failed to start grpc:" + err.Error())
}
// 接收终止信号
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
}
之前 python 就是单线程 初始化了一个 mysql 连接,每个请求都会排队使用 mysql 连接。 问一下 go 是不是也这种情况?各位大佬有没有遇到这种情况,多核的情况下是怎么个使用的。
1
keepeye 2022-09-29 12:23:31 +08:00
多虑了,有连接池. 参见 *sql.DB.SetMaxOpenConns
|
2
kidtest 2022-09-29 12:24:39 +08:00
|
3
someonedeng 2022-09-29 18:41:38 +08:00
其实是个连接池
|
4
securityCoding 2022-09-30 11:50:17 +08:00
底层帮你做好了
|