mysql.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package models
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/beego/beego/v2/server/web"
  6. "gorm.io/driver/mysql"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. "gorm.io/gorm/schema"
  10. )
  11. var DB *gorm.DB
  12. var err error
  13. func init() {
  14. mysqluser, _ := web.AppConfig.String("mysqluser")
  15. mysqlpass, _ := web.AppConfig.String("mysqlpass")
  16. mysqlurls, _ := web.AppConfig.String("mysqlurls")
  17. mysqldb, _ := web.AppConfig.String("mysqldb")
  18. httpport, _ := web.AppConfig.String("mysqlhttpport")
  19. dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local",
  20. mysqluser, mysqlpass, mysqlurls, httpport, mysqldb)
  21. DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
  22. SkipDefaultTransaction: true, //禁用默认事务
  23. Logger: logger.Default.LogMode(logger.Info), //日志配置
  24. DisableForeignKeyConstraintWhenMigrating: true, //禁用外键约束
  25. NamingStrategy: schema.NamingStrategy{
  26. SingularTable: true,
  27. }, //表名单数
  28. })
  29. // 配置连接池
  30. if err == nil {
  31. sqlDB, err := DB.DB()
  32. if err == nil {
  33. // 设置最大打开连接数
  34. sqlDB.SetMaxOpenConns(100)
  35. // 设置最大空闲连接数
  36. sqlDB.SetMaxIdleConns(10)
  37. // 设置连接最大生存时间
  38. sqlDB.SetConnMaxLifetime(time.Hour)
  39. // 设置连接最大空闲时间
  40. sqlDB.SetConnMaxIdleTime(time.Minute * 30)
  41. }
  42. }
  43. if err != nil {
  44. fmt.Println("连接mysql数据库失败", err)
  45. } else {
  46. fmt.Println("连接mysql数据库成功")
  47. }
  48. DB.Callback().Create().Before("gorm:create").Register("set_create_time", setCreateTimeCallback)
  49. // 全局回调函数,在更新记录之前设置更新时间
  50. DB.Callback().Update().Before("gorm:update").Register("set_update_time", setUpdateTimeCallback)
  51. }
  52. // GetUnix 获取当前时间戳
  53. func GetUnix() int64 {
  54. return time.Now().Unix()
  55. }
  56. // 全局回调函数,在创建记录之前设置新增时间
  57. func setCreateTimeCallback(db *gorm.DB) {
  58. if _, ok := db.Statement.Schema.FieldsByName["CreatedAt"]; ok {
  59. now := int(GetUnix())
  60. db.Statement.SetColumn("CreatedAt", now)
  61. }
  62. }
  63. // 全局回调函数,在更新记录之前设置更新时间
  64. func setUpdateTimeCallback(db *gorm.DB) {
  65. if _, ok := db.Statement.Schema.FieldsByName["UpdateTime"]; ok {
  66. now := int(GetUnix())
  67. db.Statement.SetColumn("UpdateTime", now)
  68. }
  69. }