Laden Sie Spring Beans aus benutzerdefinierten Groovy-Dateien in Grails App

8

Der Versuch, Frühling Bohnen laden von benutzerdefinierten groovy Datei in Grails 2.3.7. Ich weiß, diese Frage vor gefragt wurde, aber nach Stunden der Suche, ich bin nicht in der Lage einen einheitlichen Ansatz, dass Belastungen aus dem Classpath zu finden.

Das Ziel

  • Modifizieren Sie resources.groovy in mehrere benutzerdefinierte Ressourcendateien
  • Geben Sie benutzerdefinierte Ressourcendateien in den Standardspeicherort ein: grails-app/conf/spring
  • Benutze das Plugin, um die Magie zu machen; minimieren Sie den Aufwand

Versucht ...

%Vor%

oben Hinweis, ich verwende beans {} , nicht beans = {} , anscheinend macht es einen Unterschied:

resources.groovy

Das funktioniert ...

%Vor%

... und nach docs , sollte dies auch, aber doesn‘ t:

%Vor%

UPDATE - ARBEITSOPTIONEN

(arbeitet für Grails 2.3.7)

Option 1: (src / java)

Im Anschluss an lukelazarovic Beratung, funktioniert dieser Ansatz, da automatisch Kopien Grails (nicht kompiliert) groovy Dateien in src/java auf dem Klassenpfad; funktioniert gut in Eclipse und mit War-Bereitstellung:

%Vor%

Optionen 2: (grails-app / conf / spring)

Dieser Ansatz ermöglicht eine individuelle Bean-Konfigurationsdateien in grails-app/conf/spring (Kredite ideascultor und mark.esher )

%Vor%

Optionen 3: (Benutzerdefiniertes Plugin)

Wenn Sie benutzerdefinierte Plugins verwenden, ist dieser Ansatz ideal; Kesselbleche Config wird in das Plugin refaktoriert:

Plugin-Konfiguration

%Vor%

Grails App

Keine Konfiguration! ... Erstellen Sie einfach Ihre Bean-Konfigurationsdateien mit der *BeansConfig.groovy Konvention, gut zu gehen!

%Vor%

Update 24.09.2015

Einige Probleme mit Option 3 gefunden:

  • Laden von doppelten Ressourcendateien
  • Federressourcen sind nicht korrekt für test-app
  • konfiguriert

Wir haben es geschafft, das obige Problem so zu beheben, dass alle Ressourcendateien in grails-app/conf/spring beim Ausführen von Grails in Eclipse, WAR, Test-App usw. gleich funktionieren.

Erster Schritt: Wir haben eine Klasse erstellt, um mehr Kontrolle über das Suchen und Laden von Ressourcendateien zu haben. Dies war notwendig, da einige Dateien aufgrund von referenzierten Beans mehr als einmal geladen wurden. Wir verwenden ein Plugin, um diese Funktionalität zu kapseln, so dass diese Klasse in diesem Plugin lebt:

%Vor%

Entfernt BeansConfig.groovy suffix; Die WAR-Generierung nimmt jetzt alle Ressourcen in grails-app/conf/spring

auf %Vor%

Rufen Sie in der Plugin-Definitionsdatei den Loader von doWithSpring() auf und übergeben Sie BeanBuilder (den Delegaten) als Argument (sehr wichtig):

%Vor%

Das ist es, es gibt keine Anforderung für Benutzer des Plugins, abgesehen von dem Erstellen von benutzerdefinierten Ressourcendateien in grails-app/conf/spring

    
raffian 04.06.2014, 03:17
quelle

4 Antworten

2

Ich hatte vor ein paar Tagen ein ähnliches Problem mit einer groovigen Konfigurationsdatei, die ich in grails-app/conf hinzugefügt habe. Während dies mit anderen Ressourcen funktioniert (sie sind kopiert und auf dem Klassenpfad verfügbar), bestand das Problem mit der groovigen Datei einfach darin, dass sie kompiliert wurde und die Klassendatei enthalten war, d. H. Nicht die groovige Datei selbst.

Ich habe keine gute Dokumentation darüber gefunden, wie gemacht werden sollte, und habe sie schließlich zu web-app/WEB-INF/classes hinzugefügt. Groovy-Dateien, die hier platziert werden, werden kopiert (nicht kompiliert) und sind im Klassenpfad verfügbar.

    
Steinar 04.06.2014 09:15
quelle
1

Ich hatte das gleiche Problem mit benutzerdefinierten XML-Dateien in Grails 2.1.2.

XML-Ressourcen in grails-app/conf/spring funktionierten nicht in der Produktionsumgebung AFAIR.

Damit es sowohl in Entwicklungs- als auch in Produktionsumgebungen funktioniert, lege ich die Ressourcen schließlich in src/java . Ich denke, Sie können das gleiche Ergebnis erzielen, indem Sie Ihre groovigen Dateien in src/groovy einfügen.

    
lukelazarovic 04.06.2014 07:34
quelle
0

Wir können Beans aus verschiedenen groovy / xml-Dateien auch folgendermaßen importieren: benutze das folgende in resources.groovy -

Datei von importBeans: camel-beans.groovy ' ODER importBeans ('Klassenpfad: /camel-config.xml')

Platzieren Sie camel-beans.groovy zusammen mit resources.groovy und stellen Sie das Paket als "package spring" für den ersten Fall bereit, andernfalls setzen Sie es in den web app classpath und verwenden Sie den zweiten Weg, um es zu tun.

    
Nitesh Saxena 22.08.2016 06:37
quelle
0

Wenn Ihre resources.groovy auf dem folgenden Pfad ist

%Vor%

und dein camel-beans.groovy ist auf folgendem Pfad

%Vor%

Dann können Sie camel-beans.groovy in der Datei resources.groovy durch Hinzufügen der folgenden Zeile in resources.groovy

referenzieren %Vor%     
Aamir Ali 27.02.2017 11:25
quelle