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.
resources.groovy
in mehrere benutzerdefinierte Ressourcendateien grails-app/conf/spring
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%(arbeitet für Grails 2.3.7)
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:
Dieser Ansatz ermöglicht eine individuelle Bean-Konfigurationsdateien in grails-app/conf/spring
(Kredite ideascultor und mark.esher )
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!
Einige Probleme mit Option 3 gefunden:
test-app
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
Rufen Sie in der Plugin-Definitionsdatei den Loader von doWithSpring()
auf und übergeben Sie BeanBuilder
(den Delegaten) als Argument (sehr wichtig):
Das ist es, es gibt keine Anforderung für Benutzer des Plugins, abgesehen von dem Erstellen von benutzerdefinierten Ressourcendateien in grails-app/conf/spring
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.
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.
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.
Tags und Links java grails spring groovy spring-dsl