成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

GORM 在項目中的初始化、重要連接參數和多數據源配置

開發 項目管理
為每個變量提供了Getter方法,這樣使用起來代碼更簡潔一些。初始化主庫和從庫的DB連接時,在init方法中使用上面介紹過的initDB方法,用主從庫各自的配置進行初始化。

GORM的下載與安裝

首先GORM 升級到 V2 以后項目組織發生了變更從 github.com/jinzhu/gorm 變成了 gorm.io/gorm 安裝步驟也會跟之前的V1版本有些不同

我們先來安裝GORM,邊安裝邊說。

go get -u gorm.io/gorm

GORM 在V1 版本中各個數據庫的驅動是和整個軟件包綁定在一起的,所以下載安裝一次就行了,但是到了V2之后每種數據庫單獨提供了驅動,我們使用的是MySQL,所以先把MySQL的驅動安裝一下

go get -u  "gorm.io/driver/mysql"

如果你的數據庫里用了多數據源,那么你需要把項目用到的每個數據庫類型的驅動都先安裝上,假如說項目中還使用了 postgres 那么在初始化GORM前也需要把 postgres 的驅動下載下來。

go get -u  "gorm.io/driver/postgres"

之所以安裝這個驅動呢,是因為兩個版本在初始化數據看連接時的Open 方法有了調整

// V1
func Open(dialect string, args ...interface{}) (db *DB, err error) {}

// V2
func Open(dialector Dialector, opts ...Option) (db *DB, err error) {}

V1 版本我們直接傳一個數據庫類型的字符串就行了

db, err := gorm.Open("mysql", "root:pass@tcp(xxx)/db_name")
if err != nil {
    panic(err)
}

而V2版本需要用到我們剛才安裝的驅動

db, err := gorm.Open(
  mysql.Open("root:pass@tcp(xxx)/db_name),
  &gorm.Config{},
)

初始化GORM

安裝完驅動后先不著急去初始化GORM,前面的章節《Go 項目配置的定制化及一體化打包方案》我們給項目做好了配置管理,所以我們得先把配置文件進行一些調整,打開我們的config/application.dev.yaml 文件,添加一些Database相關的配置

database:
  type: mysql
  master:
    dsn: root:superpass@tcp(localhost:30306)/go_mall?xxx...
    maxopen: 100
    maxidle: 10
    maxlifetime: 300000000000
  slave:
    dsn: root:superpass@tcp(localhost:30306)/go_mall?xxx...
    maxopen: 100
    maxidle: 10
    maxlifetime: 300000000000

這里我們配置了主從兩個數據庫連接的配置,因為我們項目里暫時用不到主從分離,所以就先把主庫和從庫設置的一樣,等實際開發用到主從實例了再去進行相應的修改。這里的參數等到下面初始化GORM的時候再去細講。

接下來我們在 dal/dao/gorminit.go 中寫一個initDB的自定義函數,把用Database配置來初始化GORM DB連接的這部操作抽象提煉到一起

func initDB(option config.DbConnectOption) *gorm.DB {
 db, err := gorm.Open(mysql.Open(option.DSN), &gorm.Config{})
 if err != nil {
  panic(err)
 }
 sqlDb, _ := db.DB()
 sqlDb.SetMaxOpenConns(option.MaxOpenConn)
 sqlDb.SetMaxIdleConns(option.MaxIdleConn)
 sqlDb.SetConnMaxLifetime(option.MaxLifeTime)
 if err = sqlDb.Ping(); err != nil {
  panic(err)
 }
 return db}

生產環境GORM必須設置的連接參數

GORM 使用的是Go的 database/sql 來維護的連接池,這里解釋一下創建GORM DB連接時用到的這些參數,我們在配置文件里指定的maxidle、maxopen、maxlifetime 分別傳遞給了GORM DB的下面三個方法,這三個方法在生產環境時一定要記得設置

  • SetMaxIdleConns(10) 設置最大空閑連接數為10個。
  • SetMaxOpenConns(100) 設置可打開的最大連接數為 100 個。
  • SetConnMaxLifetime 設置一個連接空閑后在多長時間內可復用,上面配置文件里設置的是300000000000, 因為Go的time.Duration底層類型是int64, 一秒是1000000000,這個大家可設置一個適當的時間,一般5~15分鐘,不要太長。

Open 方法的第二個參數我們傳遞了一個 &gorm.Config{} ,里面沒有設置任何配置選項

db, err := gorm.Open(mysql.Open(option.DSN), &gorm.Config{})

我們暫時還用不到它,下一節當我們需要把GORM日志整合到應用日志時才會用到它。

讀寫分離和多數據源配置

讀寫分離

首先GORM V2 版本支持一個自動按照執行的語句進行讀寫分離連接切換的功能 DBResolver,但是感覺用起來還是比較麻煩。

這個大家可以自己研究一下,這里為介紹一個在GORM V1時就一直用的土辦法,這種方法雖然不支持自動切換,但貴在簡單,在寫Dao方法時根據邏輯類型選擇對應的DB連接即可。

我們在在 dal/dao 的 gorminit.go 文件開頭定義好保存主庫和讀庫實例的變量

var _DbMaster *gorm.DB
var _DbSlave *gorm.DB

// DB 返回只讀實例
func DB() *gorm.DB {
 return _DbSlave
}

// DBMaster 返回主庫實例
func DBMaster() *gorm.DB {
 return _DbMaster
}

為每個變量提供了Getter方法,這樣使用起來代碼更簡潔一些。初始化主庫和從庫的DB連接時,在init方法中使用上面介紹過的initDB方法,用主從庫各自的配置進行初始化。

在寫DAO方法時根據邏輯類型選擇對應的DB連接使用。

多數據源配置

有的時候你的項目里的數據可能來自不同的數據庫,那么現在項目的配置和初始化方法還不支持多數據源。

一開始做項目的時候我確實沒有考慮到這個問題,工作中大部分DB用的也是MySQL,所以這里設計的不夠靈活,好在咱們讀者中已經有人開始在項目中使用起來了,并且還做了多數據源的擴展。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2024-10-30 10:22:17

2023-01-04 09:33:31

SpringBootMybatis

2010-12-31 16:22:04

Analysis Se

2020-12-31 07:55:33

spring bootMybatis數據庫

2023-09-07 08:39:39

copy屬性數據源

2014-08-15 09:55:09

SSIS

2022-12-19 07:21:35

Hutool-db數據庫JDBC

2009-05-20 10:58:15

數據庫查詢初始化

2009-06-15 13:24:46

JBoss數據源

2010-12-27 09:59:11

ODBC數據源

2009-08-14 10:26:27

ibatis多數據源

2023-10-31 07:52:53

多數據源管理后端

2020-11-24 09:56:12

數據源讀寫分離

2023-06-07 08:08:37

MybatisSpringBoot

2020-03-13 14:05:14

SpringBoot+數據源Java

2009-06-16 16:20:58

JBoss4配置Inf

2010-05-14 15:32:51

配置MySQL

2024-01-15 06:34:09

Gin鏡像容器

2020-06-02 07:55:31

SpringBoot多數據源

2022-05-18 12:04:19

Mybatis數據源Spring
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: a久久 | 亚洲精品免费在线观看 | 亚洲精品视频免费 | 欧美成人一区二免费视频软件 | 久久国品片 | avmans最新导航地址 | 日本三级黄视频 | 国产精品日日摸夜夜添夜夜av | 二区亚洲 | 日韩精品一区二区三区中文在线 | 爱爱小视频 | 久久9视频| 国产一区二区三区四区hd | 91精品国产91久久久 | 国产精品视频二区三区 | 国产日韩欧美激情 | 蜜臀久久 | 精品视频网 | 成年人在线观看 | 久草a√| 中文字幕一级毛片视频 | 久久久成人网 | 国产精品 欧美精品 | 亚洲 中文 欧美 | 欧美一区二区三区四区视频 | 国产激情视频在线 | 在线国产一区二区三区 | 久久久成人一区二区免费影院 | 欧美一级黄色网 | 中文字幕一区二区三区日韩精品 | 中文在线a在线 | 欧美精品片| 亚洲视频欧美视频 | 成人免费福利视频 | 国产精品海角社区在线观看 | 蜜桃一区二区三区 | 中文字幕av一区二区三区 | 欧美日韩亚洲系列 | 成人免费视频久久 | 久久精品久久久久久 | 日韩三级精品 |