```
feat(database): 新增数据库初始化函数 新增 NewDatabase 函数,支持根据驱动类型初始化 MySQL 或 Postgres 数据库连接。 该函数根据传入的驱动名称自动路由到对应的数据库连接创建逻辑,并提供错误处理。 ```
This commit is contained in:
parent
bc2cb53287
commit
7e7fa16441
|
@ -1,6 +1,9 @@
|
||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"git.apinb.com/bsm-sdk/core/database/sql"
|
"git.apinb.com/bsm-sdk/core/database/sql"
|
||||||
"git.apinb.com/bsm-sdk/core/types"
|
"git.apinb.com/bsm-sdk/core/types"
|
||||||
"git.apinb.com/bsm-sdk/core/vars"
|
"git.apinb.com/bsm-sdk/core/vars"
|
||||||
|
@ -12,6 +15,24 @@ var (
|
||||||
MigrateTables []any
|
MigrateTables []any
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func NewDatabase(driver string, dsn []string, options *types.SqlOptions) (db *gorm.DB, err error) {
|
||||||
|
driver = strings.ToLower(driver)
|
||||||
|
switch driver {
|
||||||
|
case "mysql":
|
||||||
|
db, err = NewMysql(dsn, options)
|
||||||
|
case "postgres":
|
||||||
|
db, err = NewPostgres(dsn, options)
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unsupported database driver: %s", driver)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return db, nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewMysql 创建MySQL数据库服务
|
// NewMysql 创建MySQL数据库服务
|
||||||
func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
||||||
//set connection default val.
|
//set connection default val.
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package with
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.apinb.com/bsm-sdk/core/cache/redis"
|
||||||
|
"git.apinb.com/bsm-sdk/core/print"
|
||||||
|
"git.apinb.com/bsm-sdk/core/vars"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RedisCache(cfg string, cli *redis.RedisClient) {
|
||||||
|
if cfg != "" {
|
||||||
|
cli = redis.New(cfg, vars.ServiceKey)
|
||||||
|
|
||||||
|
// print inform.
|
||||||
|
print.Info("[BSM - %s] Cache: %s, DBIndex: %d", vars.ServiceKey, cfg, cli.DB)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package with
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.apinb.com/bsm-sdk/core/conf"
|
||||||
|
"git.apinb.com/bsm-sdk/core/database"
|
||||||
|
"git.apinb.com/bsm-sdk/core/print"
|
||||||
|
"git.apinb.com/bsm-sdk/core/types"
|
||||||
|
"git.apinb.com/bsm-sdk/core/vars"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Databases(cfg *conf.DBConf, db *gorm.DB, opts *types.SqlOptions) {
|
||||||
|
if cfg == nil || len(cfg.Source) == 0 {
|
||||||
|
panic("No Database Source Found !")
|
||||||
|
}
|
||||||
|
|
||||||
|
// print inform.
|
||||||
|
print.Info("[BSM - %s] Databases: %v", vars.ServiceKey, cfg)
|
||||||
|
|
||||||
|
var err error
|
||||||
|
db, err = database.NewDatabase(cfg.Driver, cfg.Source, opts)
|
||||||
|
if err != nil {
|
||||||
|
print.Error("Database Init Failed !")
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package with
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.apinb.com/bsm-sdk/core/conf"
|
||||||
|
"git.apinb.com/bsm-sdk/core/errcode"
|
||||||
|
"git.apinb.com/bsm-sdk/core/print"
|
||||||
|
"git.apinb.com/bsm-sdk/core/vars"
|
||||||
|
"go.etcd.io/etcd/client/pkg/v3/transport"
|
||||||
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Etcd(cfg *conf.EtcdConf, cli *clientv3.Client) {
|
||||||
|
if cfg == nil || len(cfg.Endpoints) == 0 {
|
||||||
|
panic("Etcd endpoints is Empty!")
|
||||||
|
}
|
||||||
|
|
||||||
|
etcdCfg := clientv3.Config{
|
||||||
|
Endpoints: cfg.Endpoints,
|
||||||
|
DialTimeout: 5 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.Passwd != nil {
|
||||||
|
etcdCfg.Username = cfg.Passwd.Account
|
||||||
|
etcdCfg.Password = cfg.Passwd.Password
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.TLS != nil {
|
||||||
|
tlsInfo := transport.TLSInfo{
|
||||||
|
TrustedCAFile: cfg.TLS.CaFile,
|
||||||
|
CertFile: cfg.TLS.CertFile,
|
||||||
|
KeyFile: cfg.TLS.KeyFile,
|
||||||
|
}
|
||||||
|
tlsConfig, err := tlsInfo.ClientConfig()
|
||||||
|
if err != nil {
|
||||||
|
print.Error(errcode.ErrEtcd.Error())
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
etcdCfg.TLS = tlsConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
cli, err = clientv3.New(etcdCfg)
|
||||||
|
if err != nil {
|
||||||
|
print.Error(errcode.ErrEtcd.Error())
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// print inform.
|
||||||
|
print.Info("[BSM - %s] Service Center: %v", vars.ServiceKey, cfg.Endpoints)
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue