创建Sql对象时使用SessionFactory与dataSource的Grails

时间:2016-02-21 09:03:43

标签: grails datasource sessionfactory

在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"?

1 个答案:

答案 0 :(得分:1)

关于"吞噬过多联系的评论"基于一些假设,在您的情况下可能会或可能不会。

假设由于Grails和GORM使用的视图模式中的会话,Hibernate将在请求期间或已经或将要创建与数据库的连接。在这种情况下,您将为Hibernate使用一个连接,为其他连接使用n-number。

如果混合使用GORM和SQL连接,从sessionFactory获取连接会更安全。

我似乎记得Grails的旧版本用于创建连接,即使请求期间没有执行GORM方法。我不完全确定更新版本(2.x +)

的情况仍然如此