111 lines
2.6 KiB
Go
111 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"sync"
|
|
"time"
|
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
type DBManager struct {
|
|
MySQL *sql.DB
|
|
Redis *redis.Client
|
|
}
|
|
|
|
// dbInstance holds the single instance of DBManager
|
|
var dbInstance *DBManager
|
|
var oncedb sync.Once
|
|
|
|
// GetDBManager provides a global access point to the DBManager instance
|
|
func GetDBManager() (*DBManager, error) {
|
|
oncedb.Do(func() {
|
|
config, _ := GetConfigManager()
|
|
dbInstance = &DBManager{}
|
|
initError = initDBManager(dbInstance, config)
|
|
})
|
|
return dbInstance, initError
|
|
}
|
|
|
|
// initDBManager initializes the DBManager instance with database connections
|
|
func initDBManager(dbManager *DBManager, config *ConfigManager) error {
|
|
// 初始化 MySQL 连接
|
|
//dsn := "username:password@tcp(localhost:3306)/aigrammar?parseTime=true"
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/aigrammar?parseTime=true",
|
|
config.GetDatabaseConfig().MysqlUser,
|
|
config.GetDatabaseConfig().MysqlPass,
|
|
config.GetDatabaseConfig().MysqlConn,
|
|
)
|
|
db, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
log.Fatalf("Error opening MySQL database: %v", err)
|
|
return errors.New("Error opening MySQL database:")
|
|
}
|
|
db.SetMaxOpenConns(25)
|
|
db.SetMaxIdleConns(10)
|
|
db.SetConnMaxLifetime(time.Minute * 5)
|
|
dbManager.MySQL = db
|
|
|
|
// 初始化 Redis 连接
|
|
rdb := redis.NewClient(&redis.Options{
|
|
Addr: config.GetDatabaseConfig().RedisConn,
|
|
Password: "", // no password set
|
|
DB: 0, // use default DB
|
|
PoolSize: 10, // 连接池大小
|
|
})
|
|
|
|
dbManager.Redis = rdb
|
|
|
|
return nil
|
|
}
|
|
|
|
func (db *DBManager) CloseDB() {
|
|
db.MySQL.Close()
|
|
db.Redis.Close()
|
|
}
|
|
|
|
/*
|
|
func NewDBManager(config *ConfigManager) (*DBManager, error) {
|
|
dbManager := &DBManager{}
|
|
|
|
// 初始化 MySQL 连接
|
|
//dsn := "username:password@tcp(localhost:3306)/aigrammar?parseTime=true"
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/aigrammar?parseTime=true",
|
|
config.GetDatabaseConfig().MysqlUser,
|
|
config.GetDatabaseConfig().MysqlPass,
|
|
config.GetDatabaseConfig().MysqlConn,
|
|
)
|
|
db, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
log.Fatalf("Error opening MySQL database: %v", err)
|
|
return nil, errors.New("Error opening MySQL database: %v", err)
|
|
}
|
|
db.SetMaxOpenConns(25)
|
|
db.SetMaxIdleConns(10)
|
|
db.SetConnMaxLifetime(time.Minute * 5)
|
|
dbManager.MySQL = db
|
|
|
|
// 初始化 Redis 连接
|
|
rdb := redis.NewClient(&redis.Options{
|
|
Addr: config.GetDatabaseConfig().RedisConn,
|
|
Password: "", // no password set
|
|
DB: 0, // use default DB
|
|
PoolSize: 10, // 连接池大小
|
|
})
|
|
|
|
dbManager.Redis = rdb
|
|
|
|
return dbManager, nil
|
|
}
|
|
|
|
func (db *DBManager) CloseDB() {
|
|
db.MySQL.Close()
|
|
db.Redis.Close()
|
|
}
|
|
|
|
*/
|