1 Star 0 Fork 0

kade / mcube

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
grom.go 2.22 KB
一键复制 编辑 原始数据 按行查看 历史
kadegolang 提交于 2023-12-13 17:31 . copy
package datasource
import (
"context"
"fmt"
"gitee.com/go-kade/mcube/ioc"
"gitee.com/go-kade/mcube/ioc/config/trace"
"github.com/uptrace/opentelemetry-go-extra/otelgorm"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func init() {
ioc.Config().Registry(&dataSource{
Provider: PROVIDER_MYSQL,
Host: "127.0.0.1",
Port: 3306,
DB: "mcube",
Username: "root",
Password: "123456",
Debug: false,
EnableTrace: true,
})
}
type dataSource struct {
Provider PROVIDER `json:"provider" yaml:"provider" toml:"provider" env:"DATASOURCE_PROVIDER"`
Host string `json:"host" yaml:"host" toml:"host" env:"DATASOURCE_HOST"`
Port int `json:"port" yaml:"port" toml:"port" env:"DATASOURCE_PORT"`
DB string `json:"database" yaml:"database" toml:"database" env:"DATASOURCE_DB"`
Username string `json:"username" yaml:"username" toml:"username" env:"DATASOURCE_USERNAME"`
Password string `json:"password" yaml:"password" toml:"password" env:"DATASOURCE_PASSWORD"`
Debug bool `json:"debug" yaml:"debug" toml:"debug" env:"DATASOURCE_DEBUG"`
EnableTrace bool `toml:"enable_trace" json:"enable_trace" yaml:"enable_trace" env:"DATASOURCE_ENABLE_TRACE"`
db *gorm.DB
ioc.ObjectImpl
}
func (m *dataSource) Name() string {
return AppName
}
func (m *dataSource) Init() error {
db, err := gorm.Open(mysql.Open(m.DSN()), &gorm.Config{})
if err != nil {
return err
}
if trace.C().Enabled && m.EnableTrace {
if err := db.Use(otelgorm.NewPlugin()); err != nil {
return err
}
}
if m.Debug {
db = db.Debug()
}
m.db = db
return nil
}
// 关闭数据库连接
func (m *dataSource) Close(ctx context.Context) error {
if m.db == nil {
return nil
}
d, err := m.db.DB()
if err != nil {
return err
}
return d.Close()
}
// 从上下文中获取事物, 如果获取不到则直接返回 无事物的DB对象
func (m *dataSource) GetTransactionOrDB(ctx context.Context) *gorm.DB {
db := GetTransactionFromCtx(ctx)
if db != nil {
return db
}
return m.db.WithContext(ctx)
}
func (m *dataSource) DSN() string {
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
m.Username,
m.Password,
m.Host,
m.Port,
m.DB,
)
}
1
https://gitee.com/go-kade/mcube.git
git@gitee.com:go-kade/mcube.git
go-kade
mcube
mcube
1225d9a674f1

搜索帮助