配置文件

如果我们使用对象管理模块中的g.DB("数据库分组名称")方法获取数据库操作对象,数据库对象将会自动读取config.toml配置文件中的相应配置项(通过配置管理模块),并自动初始化该数据库操作的单例对象。

数据库配置管理功能使用的是配置管理模块实现,因此同样支持多种数据格式如:toml, yaml, json, xml。默认并且推荐的配置文件数据格式为toml

完整的config.toml数据库配置项的数据格式形如下:

完整的数据库配置项示例(TOML):

  1. [database]
  2. [[database.default]]
  3. host = "127.0.0.1"
  4. port = "3306"
  5. user = "root"
  6. pass = "12345678"
  7. name = "test"
  8. type = "mysql"
  9. role = "master"
  10. debug = "true"
  11. weight = "100"
  12. prefix = "gf_"
  13. charset = "utf8"
  14. linkinfo = ""
  15. maxIdle = "10"
  16. maxOpen = "100"
  17. maxLifetime = "30"

为兼容不同的数据库类型,gdb将数据库的各个字段拆分出来单独配置,这样对于各种数据库的对接来说兼容性会很好。但是对于开发者来说看起来配置比较多。针对于项目中使用的已确定的数据库类型的配置,我们可以使用linkinfo属性(名称也可以简化为link)进行配置。如:

  1. [database]
  2. [[database.default]]
  3. link = "root:12345678@tcp(127.0.0.1:3306)/test"
  4. [[database.user]]
  5. type = "mysql"

也可以简化为:

  1. [database]
  2. [database.default]
  3. link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  4. [database.user]
  5. link = "mysql:root:12345678@tcp(127.0.0.1:3306)/user"

如果仅仅是单数据库节点,不使用配置分组特性,那么也可以简化为如下格式:

  1. [database]
  2. link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test"

不同数据类型对应的linkinfo如下:

各数据库类型更详细的linkinfo参数信息请查看对应引擎官网,参考【】章节

gdb支持日志输出,内部使用的是glog.Logger对象实现日志管理,并且可以通过配置文件对日志对象进行配置。默认情况下gdb关闭了DEBUG日志输出,如果需要打开DEBUG信息需要将数据库的debug参数设置为true。以下是为一个配置文件示例:

其中database.logger即为gdb的日志配置,当该配置不存在时,将会使用日志组件的默认配置,具体请参考【日志管理】章节。

原生配置(高阶,可选)

gdb数据库管理模块的内部配置管理数据结构如下:

  1. type Config map[string]ConfigGroup // 数据库配置对象
  2. type ConfigGroup []ConfigNode // 数据库分组配置
  3. // 数据库配置项(一个分组配置对应多个配置项)
  4. type ConfigNode struct {
  5. Host string // 地址
  6. Port string // 端口
  7. User string // 账号
  8. Pass string // 密码
  9. Name string // 数据库名称
  10. Type string // 数据库类型:mysql, sqlite, mssql, pgsql, oracle
  11. Debug bool // (可选)开启调试模式
  12. Charset string // (可选,默认为 utf8)编码,默认为 utf8
  13. Prefix string // (可选)表名前缀
  14. Linkinfo string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能)
  15. MaxIdleConnCount int // (可选)连接池最大闲置的连接数
  16. MaxOpenConnCount int // (可选)连接池最大打开的连接数
  17. MaxConnLifetime int // (可选,单位秒)连接对象可重复使用的时间长度
  18. }

配置管理特点:

  1. 支持多节点数据库集群管理;
  2. 每个节点可以单独配置连接属性;
  3. 采用单例模式管理数据库实例化对象;
  4. 支持对数据库集群分组管理,按照分组名称获取实例化的数据库操作对象;
  5. 支持多种关系型数据库管理,可通过ConfigNode.Type属性进行配置;
  6. 支持Master-Slave读写分离,可通过ConfigNode.Role属性进行配置;
  7. 支持客户端的负载均衡管理,可通过ConfigNode.Priority属性进行配置,值越大,优先级越高;

特别说明,gdb的配置管理最大的特点是,(同一进程中)所有的数据库集群信息都使用同一个配置管理模块进行统一维护,不同业务的数据库集群配置使用不同的分组名称进行配置和获取。

这是原生调用gdb模块来配置管理数据库。如果开发者想要自行控制数据库配置管理可以参考以下方法。若无需要可忽略该章节。

接口文档:https://godoc.org/github.com/gogf/gf/database/gdb

  1. // 添加一个数据库节点到指定的分组中
  2. func AddConfigNode(group string, node ConfigNode)
  3. // 添加一个配置分组到数据库配置管理中(同名覆盖)
  4. func AddConfigGroup(group string, nodes ConfigGroup)
  5. // 添加一个数据库节点到默认的分组中(默认为default,可修改)
  6. func AddDefaultConfigNode(node ConfigNode)
  7. // 添加一个配置分组到数据库配置管理中(默认分组为default,可修改)
  8. func AddDefaultConfigGroup(nodes ConfigGroup)
  9. // 设置默认的分组名称,获取默认数据库对象时将会自动读取该分组配置
  10. func SetDefaultGroup(groupName string)
  11. func SetConfig(c Config)

默认分组表示,如果获取数据库对象时不指定配置分组名称,那么gdb默认读取的配置分组。例如:gdb.New()可获取一个默认分组的数据库对象。

简单的做法,我们可以通过gdb包的SetConfig配置管理方法进行自定义的数据库全局配置,例如:

随后,我们可以使用来获取一个数据库操作对象。该对象用于后续的数据库一系列方法/链式操作。