beego 如何依赖注入mgo到controller
刚从java投向golang,觉得golang真的很有趣。beego给我感觉就像java的springmvc一样框架,强大!
言归正传,在项目尝试使用beego+mgo的时候不知道应该如何将mgo.session注入到controller。目前折衷的方法是在main初始化后存在全局变量,然后在一个baseController的prepare set进去。但是感觉这样不是我想要的,不知道是否有方法可以直接set到baseController里。新手求教,不胜感激!
目前代码大概如下:
func main() { sess := initMongoDB() defer sess.Close() models.DataSource = models.DataStore{sess} beego.Run() }
//controller type genericController struct { beego.Controller models.DataStore } func (g *genericController) Prepare(){ fmt.Println("genericController prepare") g.DataStore = models.DataSource }
//UserController func (c *UserController) Save(){ msess := c.GetMGoSession() defer msess.Close() msess.DB("test").C("user").Insert(&User{Name:"luis"}) //.. }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
觉得没有必要给每个连接创建一个mgo session,mgo内部有连接池,session是线程安全的,事实上之前我在网站上也用单个连接创建一个session,反而出现很多socket连接未释放的问题(有执行close),导致数据库无法连接的情况,再没有做MongoDB最大连接限制的时候甚至连ssh都没法登录了。现在我的做法是用一个全局mgo session,go一个goroutine用来定时ping重连,已防止因为MongoDB Server重启等原因造成的session过期