gf/g/database/gdb/gdb_config.go
2017-12-31 18:19:58 +08:00

158 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2017 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://gitee.com/johng/gf.
// 对常用关系数据库的封装管理包
package gdb
import (
"sync"
)
const (
gDEFAULT_CONFIG_GROUP_NAME = "default" // 默认配置名称
)
// 数据库配置包内对象
var config struct {
sync.RWMutex
c Config // 数据库配置
d string // 默认数据库分组名称
}
// 数据库配置
type Config map[string]ConfigGroup
// 数据库集群配置
type ConfigGroup []ConfigNode
// 数据库单项配置
type ConfigNode struct {
Host string // 地址
Port string // 端口
User string // 账号
Pass string // 密码
Name string // 数据库名称
Type string // 数据库类型mysql, sqlite, mssql, pgsql, oracle(目前仅支持mysql)
Role string // (可选默认为master)数据库的角色用于主从操作分离至少需要有一个master参数值master, slave
Charset string // (可选,默认为 utf-8)编码,默认为 utf-8
Priority int // (可选)用于负载均衡的权重计算,当集群中只有一个节点时,权重没有任何意义
Linkinfo string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能)
}
// 数据库集群配置示例,支持主从处理,多数据库集群支持
/*
var DatabaseConfiguration = Config {
// 数据库集群配置名称
"default" : ConfigGroup {
{
Host : "192.168.1.100",
Port : "3306",
User : "root",
Pass : "123456",
Name : "test",
Type : "mysql",
Role : "master",
Charset : "utf-8",
Priority : 100,
},
{
Host : "192.168.1.101",
Port : "3306",
User : "root",
Pass : "123456",
Name : "test",
Type : "mysql",
Role : "slave",
Charset : "utf-8",
Priority : 100,
},
},
}
*/
// 包初始化
func init() {
config.c = make(Config)
config.d = gDEFAULT_CONFIG_GROUP_NAME
}
// 设置当前应用的数据库配置信息,进行全局数据库配置覆盖操作
func SetConfig (c Config) {
config.Lock()
defer config.Unlock()
config.c = c
}
// 添加数据库服务器集群配置
func AddConfigGroup (group string, nodes ConfigGroup) {
config.Lock()
config.c[group] = nodes
config.Unlock()
}
// 添加一台数据库服务器配置
func AddConfigNode (group string, node ConfigNode) {
config.Lock()
config.c[group] = append(config.c[group], node)
config.Unlock()
}
// 添加一台数据库服务器配置,通过解析规范的字符串配置实现
// 配置格式:账号@地址:端口,密码,数据库名称,数据库类型[,集群角色(master|slave),字符编码,负载均衡优先级,自定义链接]
//func AddConfigNodeByString (group string, nodestr string) {
// reg, _ := regexp.Compile(`(.+)@(.+):([^,]+),([^,]+),([^,]+),([^,]+)`)
// match := reg.FindStringSubmatch(nodestr)
// if match != nil {
// node := ConfigNode{
// User : strings.TrimSpace(match[1]),
// Host : strings.TrimSpace(match[2]),
// Port : strings.TrimSpace(match[3]),
// Pass : strings.TrimSpace(match[4]),
// Name : strings.TrimSpace(match[5]),
// Type : strings.TrimSpace(match[6]),
// }
// if len(match[0]) + 1 < len(nodestr) {
// extra := strings.Split(nodestr[len(match[0]) + 1:], ",")
// if len(extra) > 0 {
// node.Role = strings.TrimSpace(extra[0])
// }
// if len(extra) > 1 {
// node.Charset = strings.TrimSpace(extra[1])
// }
// if len(extra) > 2 {
// node.Priority, _ = strconv.Atoi(strings.TrimSpace(extra[2]))
// }
// if len(extra) > 3 {
// index := len(extra[0]) + len(extra[1]) + len(extra[2]) + 3
// node.Linkinfo = strings.TrimSpace(nodestr[len(match[0]) + 1 + index:])
// }
// }
// AddConfigNode(group, node)
// }
//}
// 添加默认链接的一台数据库服务器配置,通过解析规范的字符串配置实现
//func AddDefaultConfigNodeByString (nodestr string) {
// AddConfigNodeByString(gDEFAULT_CONFIG_GROUP_NAME, nodestr)
//}
// 添加默认链接的一台数据库服务器配置
func AddDefaultConfigNode (node ConfigNode) {
AddConfigNode(gDEFAULT_CONFIG_GROUP_NAME, node)
}
// 添加默认链接的数据库服务器集群配置
func AddDefaultConfigGroup (nodes ConfigGroup) {
AddConfigGroup(gDEFAULT_CONFIG_GROUP_NAME, nodes)
}
// 设置默认链接的数据库链接配置项(默认是 default)
func SetDefaultGroup (groupName string) {
config.Lock()
config.d = groupName
config.Unlock()
}