在Grails中,我可以通过两种方式创建Sql对象:
def sql = new Sql(sessionFactory.currentSession.connection())
def sql = new Sql(dataSource)
我已经在Stackoverflow上阅读了这个帖子:Getting the SessionFactory for a particular Datasource in Grails ......其中一个答案是dataSource" ... 更好地吞噬过多的连接以使用sessionFactory.currentSession.connection()"
这个建议是否正确,这两者有什么区别?
检查创建的对象时,我发现它们几乎相同,只有2个属性不同: dataSource 和 useConnection 。
对于 dataSource ,它是 dataSource = TransactionAwareDataSourceProxy和useConnection = null ,而对于 sessionFactory ,它是 dataSource = null并且useConnection = $ Proxy 36 。
为什么这会影响" gobblin up over connections"?
答案 0 :(得分:1)
关于"吞噬过多联系的评论"基于一些假设,在您的情况下可能会或可能不会。
假设由于Grails和GORM使用的视图模式中的会话,Hibernate将在请求期间或已经或将要创建与数据库的连接。在这种情况下,您将为Hibernate使用一个连接,为其他连接使用n-number。
如果混合使用GORM和SQL连接,从sessionFactory获取连接会更安全。
我似乎记得Grails的旧版本用于创建连接,即使请求期间没有执行GORM方法。我不完全确定更新版本(2.x +)
的情况仍然如此