gone v1.1.1发布,支持数据集群和多数据库

v1.1.1

  • goner/xorm 支持集群 和 多数据库,最新文档:https://goner.fun/zh/references/xorm.html
  • 新增 goner/gorm,封装gorm.io/gorm,用于数据库的访问,暂时只支持mysql,完善中…

1.goner/xorm支持集群

1.1 配置项

配置项必须默认值描述
database.cluster.enablefalse是否启用集群模式
database.driver-name否(非集群模式必填)-数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.dsn否(非集群模式必填)-数据库连接字符串
database.max-idle-count5连接池最大空闲连接数
database.max-open20连接池最大连接数
database.max-lifetime10m连接池连接最大存活时间
database.show-sqltrue是否打印SQL日志
database.cluster.master.driver-name否(集群模式必填)-主库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.cluster.master.dsn否(集群模式必填)-主库数据库连接字符串
database.cluster.slaves[n].driver-name否(集群模式必填)-从库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.cluster.slaves[n].dsn否(集群模式必填)-从库数据库连接字符串
1.1.1 非集群模式例子
database.driver-name=mysql
database.dsn=root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local
1.1.2 集群模式例子
database.cluster.enable=true

# 主数据库配置
database.cluster.master.driver-name=mysql
database.cluster.master.dsn=root:123456@tcp(master-db-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

# 从数据库配置
database.cluster.slaves[0].driver-name=mysql
database.cluster.slaves[0].dsn=root:123456@tcp(slave-db-0-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

database.cluster.slaves[1].driver-name=mysql
database.cluster.slaves[1].dsn=root:123456@tcp(slave-db-1-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

database.cluster.slaves[2].driver-name=mysql
database.cluster.slaves[2].dsn=root:123456@tcp(slave-db-1-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

# ... 更多从数据库

1.2 在代码中注入数据库引擎

import "github.com/gone-io/gone"

type struct dbUser struct {
	gone.Flag
	db gone.XormEngine `gone:"*"` //注入数据库引擎【集群模式,注入的是数据库集群,通过该方式获取的引擎查询数据时会随机到各从数据库,写入数据时会使用主数据库】
	masterDb gone.XormEngine `gone:"xorm,master"` // 注入主数据库,集群模式下有效
	slaveDb0 gone.XormEngine `gone:"xorm,slave=0"` //注入从数据库0,集群模式下有效
	slaveDb1 gone.XormEngine `gone:"xorm,slave=1"` //注入从数据库1,集群模式下有效
	slaveDbs []gone.XormEngine `gone:"xorm"`       //主入从数据库Slice,集群模式下有效
}

type Book struct {
	Id int64
	Title string
}

func (d *dbUser) GetBookById(id int64) (book *Book, err error) {
	book = new(Book)
	has, err := d.db.Where("id=?", id).Get(book)
	if err != nil {
		return nil, gone.ToError(err)
	}
	if !has {
		return nil, gone.NewParameterError("book not found", 404)
	}
	return book, nil
}

2 goner/xorm支持多数据库

2.1 配置多个数据库

多数据库配置前缀为database.{数据库名称},例如:database.db1database.db2

配置项必须默认值描述
{数据库配置前缀}.cluster.enablefalse是否启用集群模式
{数据库配置前缀}.driver-name否(非集群模式必填)-数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.dsn否(非集群模式必填)-数据库连接字符串
{数据库配置前缀}.max-idle-count5连接池最大空闲连接数
{数据库配置前缀}.max-open20连接池最大连接数
{数据库配置前缀}.max-lifetime10m连接池连接最大存活时间
{数据库配置前缀}.show-sqltrue是否打印SQL日志
{数据库配置前缀}.cluster.master.driver-name否(集群模式必填)-主库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.cluster.master.dsn否(集群模式必填)-主库数据库连接字符串
{数据库配置前缀}.cluster.slaves[n].driver-name否(集群模式必填)-从库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.cluster.slaves[n].dsn否(集群模式必填)-从库数据库连接字符串

2.2 多数据库注入

import "github.com/gone-io/gone"

type struct dbUser struct {
	gone.Flag

	// 注入`{数据库配置前缀}`为`database.db1`的数据库引擎【集群模式,注入的是数据库集群,通过该方式获取的引擎查询数据时会随机到各从数据库,写入数据时会使用主数据库】
	db1 gone.XormEngine `gone:"xorm,db=database.db1"`

	// 注入`{数据库配置前缀}`为`database.db1`的主数据库,集群模式下有效
	masterDb gone.XormEngine `gone:"xorm,db=database.db1,master"`

	// 注入`{数据库配置前缀}`为`database.db1`的从数据库0,集群模式下有效
	slaveDb0 gone.XormEngine `gone:"xorm,db=database.db1,slave=0"`

	// 注入`{数据库配置前缀}`为`database.db1`的从数据库1,集群模式下有效
	slaveDb1 gone.XormEngine `gone:"xorm,db=database.db1,slave=1"`

	// 主入`{数据库配置前缀}`为`database.db1`的从数据库Slice,集群模式下有效
	slaveDbs []gone.XormEngine `gone:"xorm,db=database.db1"`
}

完整文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值