Database 阻止Grails在控制器方法中打开与数据库的连接

Database 阻止Grails在控制器方法中打开与数据库的连接,database,grails,Database,Grails,我有一个正在与另一台机器通信的服务。由于这是一种简单的控制器方法,Grails会在我的控制器与其他服务器通信时自动从池中获取DB连接。我想阻止它这样做,并在我准备好的时候手动打开数据库连接,这样它就不会像进行网络调用那样长时间占用连接。如何防止Grails在控制器方法中自动从池中获取连接?创建控制器时,控制器上有事务性注释,类似于: @Transactional(readOnly=true) class FooController { .. 如果删除该注释(以及任何方法级注释),Grail

我有一个正在与另一台机器通信的服务。由于这是一种简单的控制器方法,Grails会在我的控制器与其他服务器通信时自动从池中获取DB连接。我想阻止它这样做,并在我准备好的时候手动打开数据库连接,这样它就不会像进行网络调用那样长时间占用连接。如何防止Grails在控制器方法中自动从池中获取连接?

创建控制器时,控制器上有
事务性
注释,类似于:

 @Transactional(readOnly=true)
 class FooController { ..
如果删除该注释(以及任何方法级注释),Grails将不再连接到数据库以启动事务

视图中的opensession不应该起作用,因为我们使用lazyinit方法来获得与OSIV的连接

注意:我上面的回答假设您使用的是最新版本的Grails(2.3.x或更高版本)

更新

对于MongoDB,您可以通过在
grails app/conf/spring/resources.groovy
中定义以下bean(覆盖默认值)来自动禁用所有控制器的连接:

 mongoPersistenceInterceptor(org.codehaus.groovy.grails.support.NullPersistentCon‌​textInterceptor) 

然而,目前没有办法在每个控制器的基础上禁用

Hmm,我怀疑这是因为opensession-in-view方法,其中一个请求立即获得一个hibernate会话来使用。我不确定你是否可以为一个特定的控制器或者甚至是控制器中的一个方法禁用它。一个很好的问题。如果版本低于2.3.x怎么办?只是好奇。如果在下面,控制器没有默认只读事务,因此不会启动任何事务,也不会连接到数据库。因此,我现在的任何控制器上都没有@Transactional(我使用的是2.3,但我从2.2升级)。我还使用MongoDB而不是Hibernate。这对MongoDB插件仍然有效吗?我能让它自动停止为我打开连接吗?好的,为整个应用关闭它对我来说是个问题。如果我能在每个方法级别上做到这一点,那就太棒了。谢谢你的回答,格雷姆。