init_service.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package utils
  2. import (
  3. "context"
  4. "fmt"
  5. "go-policy-service/config"
  6. "log"
  7. "os"
  8. "time"
  9. "github.com/go-redis/redis/v8"
  10. "go.mongodb.org/mongo-driver/mongo"
  11. "go.mongodb.org/mongo-driver/mongo/options"
  12. "gorm.io/driver/mysql"
  13. "gorm.io/gorm"
  14. )
  15. var Db *gorm.DB
  16. var Rdb *redis.Client
  17. var Mongo *mongo.Client
  18. func InitDB(cfg *config.Config) error {
  19. dsn := getDSN(cfg)
  20. conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  21. if err != nil {
  22. return err
  23. }
  24. Db = conn
  25. return nil
  26. }
  27. func getDSN(cfg *config.Config) string {
  28. return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4",
  29. cfg.DBUser,
  30. cfg.DBPassword,
  31. cfg.DBHost,
  32. cfg.DBPort,
  33. cfg.DBName)
  34. }
  35. // 初始化 Redis
  36. func InitRedis(cfg *config.Config) error {
  37. Rdb = redis.NewClient(&redis.Options{
  38. Addr: fmt.Sprintf("%s:%d", cfg.RedisHost, cfg.RedisPort),
  39. Password: cfg.RedisPassword,
  40. DB: cfg.RedisDB,
  41. })
  42. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  43. defer cancel()
  44. if _, err := Rdb.Ping(ctx).Result(); err != nil {
  45. return fmt.Errorf("redis connection failed: %w", err)
  46. }
  47. return nil
  48. }
  49. func InitMongoDB(cfg *config.Config) {
  50. // 从环境变量中获取 MongoDB 连接信息
  51. dsn := os.Getenv("MONGO_DSN")
  52. host := os.Getenv("MONGO_HOST")
  53. port := os.Getenv("MONGO_PORT")
  54. // 如果存在 MONGO_DSN 环境变量,则使用它来建立连接
  55. var client *mongo.Client
  56. var err error
  57. if dsn != "" {
  58. client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(dsn))
  59. } else {
  60. // 否则,使用 host 和 port 构建连接 URI
  61. uri := fmt.Sprintf("mongodb://%s:%s", host, port)
  62. client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
  63. }
  64. if err != nil {
  65. log.Fatal(err)
  66. }
  67. // 检查连接
  68. err = client.Ping(context.TODO(), nil)
  69. if err != nil {
  70. log.Fatal(err)
  71. }
  72. Mongo = client
  73. fmt.Println("Connected to MongoDB!")
  74. }