package main import ( "fmt" "github.com/spf13/viper" "go.uber.org/zap" "gorm.io/driver/clickhouse" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "jygit.jydev.jianyu360.cn/data_processing/common_utils/log" "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb" "net/url" "os" "time" ) var GF GlobalConf func InitConfig() (err error) { viper.SetConfigFile("config.toml") // 指定配置文件路径 viper.SetConfigName("config") // 配置文件名称(无扩展名) viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项 viper.AddConfigPath("./") viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置 viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置 err = viper.ReadInConfig() // 查找并读取配置文件 if err != nil { // 处理读取配置文件的错误 return } err = viper.Unmarshal(&GF) return err } func init() { err := InitConfig() if err != nil { fmt.Println("InitConfig err", err) os.Exit(1) } InitLog() //InitMgo() //InitEs() InitMysql() InitClickhouse() // } func InitLog() { now := time.Now() err := log.InitLog( log.Path(GF.Log.LogPath), log.Level(GF.Log.LogLevel), log.Compress(GF.Log.Compress), log.MaxSize(GF.Log.MaxSize), log.MaxBackups(GF.Log.MaxBackups), log.MaxAge(GF.Log.MaxAge), log.Format(GF.Log.Format), ) if err != nil { fmt.Printf("InitLog failed: %v\n", err) os.Exit(1) } log.Info("InitLog", zap.Any("duration", time.Since(now).Seconds())) } func InitMysql() { now := time.Now() username := GF.Mysql.Username password := GF.Mysql.Password host := GF.Mysql.Address // 本地 //host := "172.17.162.27:14000" //线上 database := GF.Mysql.Dbname dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, database) // 连接到数据库 var err error AnalysisDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), //不打印日志 }) if err != nil { log.Info("InitMysql", zap.String("初始化MySQL", "data_analysis数据库失败"), zap.Error(err)) return } else { log.Info("InitMysql", zap.String("初始化MySQL", "data_analysis数据库成功")) } dsn2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, GF.Mysql.Dbname2) JianyuDB, err = gorm.Open(mysql.Open(dsn2), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), //不打印日志 }) if err != nil { log.Info("InitMysql", zap.String("初始化MySQL", "jianyu 数据库失败"), zap.Error(err)) return } else { log.Info("InitMysql", zap.String("初始化MySQL", "jianyu 数据库成功")) } dsn3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, GF.Mysql.Dbname3) JianyuSubjectDB, err = gorm.Open(mysql.Open(dsn3), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), //不打印日志 }) if err != nil { log.Info("InitMysql", zap.String("初始化MySQL", "Jianyu_subjectdb 数据库失败"), zap.Error(err)) return } else { log.Info("InitMysql", zap.String("初始化MySQL", "Jianyu_subjectdb 数据库成功")) } log.Info("InitMysql", zap.Any("duration", time.Since(now).Seconds())) } //func InitEs() { // now := time.Now() // //Es = &elastic.Elastic{ // // //S_esurl: "http://127.0.0.1:19805", // // S_esurl: GF.EsP.URL, // // I_size: 5, // // Username: GF.EsP.Username, // // Password: GF.EsP.Password, // //} // //Es.InitElasticSize() // // EsClient, _ = es.NewClient( // es.SetURL(GF.EsP.URL), // es.SetBasicAuth(GF.EsP.Username, GF.EsP.Password), // es.SetSniff(false), // ) // // log.Info("InitEs", zap.Any("duration", time.Since(now).Seconds())) //} func InitMgo() { now := time.Now() Mgo = &mongodb.MongodbSim{ MongodbAddr: GF.Mongob.Host, DbName: GF.Mongob.DB, Size: 10, UserName: GF.Mongob.Username, Password: GF.Mongob.Password, } Mgo.InitPool() MgoP = &mongodb.MongodbSim{ MongodbAddr: GF.Mongop.Host, DbName: GF.Mongop.DB, Size: 10, UserName: GF.Mongop.Username, Password: GF.Mongop.Password, } MgoP.InitPool() MgoSpider = &mongodb.MongodbSim{ MongodbAddr: GF.Mongospider.Host, DbName: GF.Mongospider.DB, Size: 10, UserName: GF.Mongospider.Username, Password: GF.Mongospider.Password, } MgoSpider.InitPool() log.Info("InitMgo", zap.Any("duration", time.Since(now).Seconds())) } // InitClickhouse 初始化Clickhouse func InitClickhouse() { username := GF.Clickhouse.Username password := GF.Clickhouse.Password host := GF.Clickhouse.Host dbname := GF.Clickhouse.DB var err error // 设置时区为 Asia/Shanghai loc, err := time.LoadLocation("Asia/Shanghai") if err != nil { log.Info("failed to load location: ", zap.Error(err)) } encodedPassword := url.QueryEscape(password) // 移除连接字符串中的 loc 参数 dn := fmt.Sprintf("clickhouse://%s:%s@%s/%s?dial_timeout=10s&read_timeout=20s", username, encodedPassword, host, dbname) ClickhouseDB, err = gorm.Open(clickhouse.Open(dn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { log.Info("打开数据库失败:", zap.Error(err)) } else { log.Info("连接数据库成功", zap.String("", ClickhouseDB.Name())) } // 确保 GORM 使用本地时区 ClickhouseDB = ClickhouseDB.Set("gorm:time_loc", loc) // 检查时间是否正确 now := time.Now().In(loc) // 使用本地时间 log.Info("Current local time: ", zap.String("time", now.String())) }