美文网首页
gin使用中间件懒加载数据库连接对象

gin使用中间件懒加载数据库连接对象

作者: funcx | 来源:发表于2019-03-11 11:47 被阅读0次
const connFuncKey = "connFunc"

func GetConnFunc(ctx *gin.Context) func() interface{} {
    return ctx.MustGet(connFuncKey).(func() interface{})
}

func main() {
    r := gin.Default()
    r.Use(
        func(ctx *gin.Context) {
            log.Println("level 1, start")
            var dbConn *mgo.Session
            // log.Println(dbConn == nil)
            ctx.Set(connFuncKey, func() interface{} {
                if dbConn != nil {
                    log.Println("连接已存在,直接返回")
                    return dbConn
                }
                log.Println("连接不存在初始化")
                dbConn = pool.GetMgoConn()
                return dbConn
            })
            ctx.Next()
            if dbConn != nil {
                log.Println("连接存在需要释放")
                pool.PutMgoConn(dbConn)
            }
            log.Println("level 1 end")
        })
    r.GET("/",
        func(ctx *gin.Context) {
            log.Println("level 2, start")
            conn := GetConnFunc(ctx)().(*mgo.Session)
            err := conn.DB("test").C("test").Insert(map[string]string{"a": "1"})
            if err != nil {
                log.Println(err)
            }
            ctx.Next()
            log.Println("level 2, end")
        },
        func(ctx *gin.Context) {
            log.Println("level 3 start")
            conn := GetConnFunc(ctx)().(*mgo.Session)
            err := conn.DB("test").C("test").Insert(map[string]string{"a": "1"})
            if err != nil {
                log.Println(err)
            }
            log.Println("level 3 end")
        },
    )
    r.Run(":3000")
}

相关文章

  • gin使用中间件懒加载数据库连接对象

  • 懒加载

    1、什么是懒加载? 懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的...

  • Gin 中间件学习

    《Gin(七):中间件的使用和定义》《Go Web轻量级框架Gin学习系列:中间件使用详解》

  • jdbc 02 最基本步骤

    jdbc 使用步骤:贾琏欲执事导的包都使用java.sql下的包 加载数据库驱动 获取连接对象 获取执行语句对象 ...

  • gin# 向 cookie 类型的 session store

    问题描述 在使用 gin 的 session 中间件 github.com/gin-contrib/session...

  • python pony 常用操作

    from pony import orm 1. 连接 创建数据库连接对象, 此时并未连接数据库,后续可以使用该对象...

  • JDBC连接池与数据源

    建立数据库连接 (1) 加载驱动程序,向DriverManager注册 (2) 获得数据库连接的具体代表对象 Dr...

  • 懒加载 学习记录

    什么是懒加载 懒加载是延时加载,即在使用到该对象的时候才将其加载到内存中。 为什么要用懒加载 主要目的是为了提升效...

  • JDBC(六)连接池

    1.连接池思想 为什么必须使用数据库连接池: 普通的JDBC数据库连接(Connectiond对象)使用 Driv...

  • Python连接SQL Server数据库 - pymssql使

    连接数据库 pymssql连接数据库的方式和使用sqlite的方式基本相同: 使用connect创建连接对象 co...

网友评论

      本文标题:gin使用中间件懒加载数据库连接对象

      本文链接:https://www.haomeiwen.com/subject/limvpqtx.html