2014-06-27 17 views
6

我有一個與另一臺機器通信的服務。由於它是一個簡單的Controller方法,當我的控制器正在與其他服務器進行通信時,Grails會自動從池中獲取數據庫連接。我想阻止它這樣做,並在我準備好時手動打開數據庫連接,以便在長時間內不會像網絡呼叫一樣吸引連接。如何防止Grails通過控制器方法自動獲取池中的連接?阻止Grails在Controller方法中打開與數據庫的連接

+1

嗯禁止在每個控制器的基礎上,我懷疑這是因爲,鑑於辦法的公開會議,其中一個請求立即獲得使用Hibernate Session的生命。我不確定你是否可以禁用該控制器中的特定控制器甚至是方法。一個非常好的問題。 –

回答

3

當你創建一個控制器,它有它的Transactional註釋,是這樣的:

@Transactional(readOnly=true) 
class FooController { .. 

如果刪除註釋(以及任何方法級別的註解),那麼Grails將不再連接到數據庫開始交易。

打開會話在View不應該發揮作用,因爲我們使用了延遲初始化的方法獲得與OSIV連接

注意我的回答上述假定您使用的Grails(或2.3.x版本以上)最新的版本

更新

MongoDB的,你可以自動禁用由grails-app/conf/spring/resources.groovy定義以下豆(它覆蓋缺省值)的所有控制器的連接:

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

但是沒有辦法,此刻

+0

如果版本低於2.3.x,該怎麼辦?只是好奇。 –

+1

如果在下面,控制器沒有默認只讀事務,所以不會啓動事務,也不會連接到數據庫。 –

+0

所以我現在沒有任何控制器的@Transactional(我使用2.3,但是我從2.2升級)。我也使用MongoDB而不是Hibernate。這對MongoDB插件仍然有效嗎?我可以讓它停止爲我自動打開連接嗎? – chubbsondubs