2014-06-27 3 views
6

Ich habe einen Dienst, der mit einem anderen Computer kommuniziert. Da es sich um eine einfache Controller-Methode handelt, greift Grails automatisch eine DB-Verbindung aus dem Pool, während mein Controller mit dem anderen Server kommuniziert. Ich möchte das verhindern und die Datenbankverbindung manuell öffnen, wenn ich bereit bin, damit sie eine Verbindung während eines langen Zeitraums nicht aufschnappt, wie zum Beispiel Netzwerkanrufe. Wie verhindere ich, dass Grails in einer Controller-Methode automatisch eine Verbindung aus dem Pool aufnimmt?Grails beim Öffnen einer Verbindung zur Datenbank in einer Controller-Methode stoppen

+1

Hmm zu deaktivieren, ich vermute, dass dies aufgrund der offenen Sitzung im Hinblick Ansatz ist, wo eine Anfrage sofort eine Hibernate-Session erhält zu verwenden. Ich bin mir nicht sicher, ob Sie das für einen bestimmten Controller oder sogar eine Methode in diesem Controller deaktivieren können. Eine sehr gute Frage. –

Antwort

3

Wenn Sie einen Controller zu erstellen hat es die Transactional Anmerkung auf sie, so etwas wie:

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

Wenn Sie diese Anmerkung entfernen (und alle Verfahren Ebene Anmerkungen), dann wird Grails keine Verbindung mehr mit der Datenbank zu starten die Transaktion.

Open Session In Ansicht sollte nicht ins Spiel kommen, da wir einen faulen init Ansatz zum Erhalt der Verbindung mit OSIV

Hinweis beantworten über meinen Gebrauch vorausgesetzt, dass Sie eine aktuelle Version von Grails verwenden (2.3.x oder höher)

Aktualisiert

für MongoDB Sie durch die Definition der folgenden Bean automatisch Verbindung für alle Controller deaktivieren können (was die Standardeinstellung überschreibt) in grails-app/conf/spring/resources.groovy:

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

Allerdings gibt es keine Möglichkeit auf einer Pro-Controller Basis zur Zeit

+0

Was ist, wenn die Version unter 2.3.x ist? Nur neugierig. –

+1

Wenn es unten ist, gibt es keinen Standard, nur Transaktionen für Controller zu lesen, daher würde keine Transaktion gestartet und keine Verbindung zur Datenbank hergestellt. –

+0

Also ich habe @Transactional jetzt auf keinem meiner Controller (ich benutze 2.3, aber ich habe von 2.2 aktualisiert). Ich verwende auch MongoDB anstelle von Hibernate. Funktioniert das immer noch für das MongoDB-Plugin? Kann ich dafür sorgen, dass für mich automatisch keine Verbindung mehr hergestellt wird? – chubbsondubs

Verwandte Themen