data.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package data
  2. import (
  3. "github.com/go-kratos/kratos-layout/internal/conf"
  4. "github.com/go-kratos/kratos-layout/internal/data/models"
  5. "github.com/go-kratos/kratos/v2/log"
  6. "github.com/google/wire"
  7. "github.com/redis/go-redis/v9"
  8. )
  9. // ProviderSet is data providers.
  10. var ProviderSet = wire.NewSet(NewRedis, NewData)
  11. // Data .
  12. type Data struct {
  13. log *log.Helper
  14. rdb *redis.Client
  15. *models.Mysql
  16. }
  17. // NewData .
  18. func NewData(c *conf.Bootstrap, rdb *redis.Client, logger log.Logger) (*Data, func(), error) {
  19. cleanup := func() {
  20. }
  21. data := &Data{
  22. log: log.NewHelper(log.With(logger, "module", "data/data")),
  23. }
  24. var err error
  25. if c.Data.Database != nil {
  26. data.Mysql, err = models.NewMysql(c.Data.Database.Source, logger)
  27. if err != nil {
  28. return nil, cleanup, err
  29. }
  30. data.Mysql.XDB.SetMaxIdleConns(int(c.Data.Database.MaxIdleConns))
  31. data.Mysql.XDB.SetMaxOpenConns(int(c.Data.Database.MaxOpenConns))
  32. }
  33. data.rdb = rdb
  34. cleanup = func() {
  35. if data.XDB != nil {
  36. data.XDB.Close()
  37. }
  38. if data.rdb != nil {
  39. data.rdb.Close()
  40. }
  41. }
  42. return data, cleanup, nil
  43. }
  44. func NewRedis(c *conf.Bootstrap) *redis.Client {
  45. if c.Data.Redis == nil {
  46. return nil
  47. }
  48. rdb := redis.NewClient(&redis.Options{
  49. Addr: c.Data.Redis.Addr,
  50. DB: int(c.Data.Redis.Db),
  51. DialTimeout: c.Data.Redis.DialTimeout.AsDuration(),
  52. WriteTimeout: c.Data.Redis.WriteTimeout.AsDuration(),
  53. ReadTimeout: c.Data.Redis.ReadTimeout.AsDuration(),
  54. PoolSize: int(c.Data.Redis.PoolSize),
  55. MinIdleConns: int(c.Data.Redis.MinIdleConns),
  56. })
  57. return rdb
  58. }