| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package utils
- import (
- "context"
- "fmt"
- "go-policy-service/config"
- "log"
- "os"
- "time"
- "github.com/go-redis/redis/v8"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- )
- var Db *gorm.DB
- var Rdb *redis.Client
- var Mongo *mongo.Client
- func InitDB(cfg *config.Config) error {
- dsn := getDSN(cfg)
- conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
- if err != nil {
- return err
- }
- Db = conn
- return nil
- }
- func getDSN(cfg *config.Config) string {
- return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4",
- cfg.DBUser,
- cfg.DBPassword,
- cfg.DBHost,
- cfg.DBPort,
- cfg.DBName)
- }
- // 初始化 Redis
- func InitRedis(cfg *config.Config) error {
- Rdb = redis.NewClient(&redis.Options{
- Addr: fmt.Sprintf("%s:%d", cfg.RedisHost, cfg.RedisPort),
- Password: cfg.RedisPassword,
- DB: cfg.RedisDB,
- })
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- if _, err := Rdb.Ping(ctx).Result(); err != nil {
- return fmt.Errorf("redis connection failed: %w", err)
- }
- return nil
- }
- func InitMongoDB(cfg *config.Config) {
- // 从环境变量中获取 MongoDB 连接信息
- dsn := os.Getenv("MONGO_DSN")
- host := os.Getenv("MONGO_HOST")
- port := os.Getenv("MONGO_PORT")
- // 如果存在 MONGO_DSN 环境变量,则使用它来建立连接
- var client *mongo.Client
- var err error
- if dsn != "" {
- client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(dsn))
- } else {
- // 否则,使用 host 和 port 构建连接 URI
- uri := fmt.Sprintf("mongodb://%s:%s", host, port)
- client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
- }
- if err != nil {
- log.Fatal(err)
- }
- // 检查连接
- err = client.Ping(context.TODO(), nil)
- if err != nil {
- log.Fatal(err)
- }
- Mongo = client
- fmt.Println("Connected to MongoDB!")
- }
|