¿Cómo llego a la información de Config.groovy desde un objeto de dominio, o desde un alcance estático? Estoy usando ConfigurationHolder.config. * Ahora, pero eso y ApplicationHolder están en desuso, por lo que me gustaría 'hacerlo bien' ... pero el objeto grailsApplication no está disponible en un ámbito DO/estático.obteniendo la información de configuración de grails 2.0.0M1 en el objeto de dominio y el alcance estático?
Respuesta
Agregaría el grailsApplication
a la metaclase de clases de dominio; esto es algo que estoy pensando hacer para 2.0 final. Por ahora, colóquelo en BootStrap.groovy
, p.
class BootStrap {
def grailsApplication
def init = { servletContext ->
for (dc in grailsApplication.domainClasses) {
dc.clazz.metaClass.getGrailsApplication = { -> grailsApplication }
dc.clazz.metaClass.static.getGrailsApplication = { -> grailsApplication }
}
}
}
A continuación, puede acceder a la configuración de grailsApplication.config
, y la primavera a través de los granos de grailsApplication.mainContext.getBean('foo')
o simplemente grailsApplication.mainContext.foo
.
Realmente quería acceder a config en utilidades estáticas solamente. Después de buscar y leer la mayoría de las respuestas en tanto, me encontré con una solución sencilla (Puede ser útil para alguien): Clase
Agregar titular bajo src/maravilloso:
class StaticContext {
static def app;
}
inicializarlo en init arranque
class BootStrap {
def grailsApplication
def init = { servletContext ->
StaticContext.app = grailsApplication
}
def destroy = {
}
}
y acceder a ella en utilidades estáticas:
//In my case Solr URL in single ton
def solrUrl = StaticContext.app.config.solr.url
El Grails 2 repla cemento para el ApplicationHolder
obsoleto, ConfigurationHolder
, etc. es grails.util.Holders
, que proporciona la misma funcionalidad pero de una manera que es segura cuando varias aplicaciones diferentes en el mismo contenedor comparten una única copia de los archivos JAR de Grails en un cargador de clases principal (este es el caso donde los titulares antiguos se rompieron).
import grails.util.Holders
// ...
static void foo() {
def configOption = Holders.config.myapp.option
}
En Grails 2.2.5 He encontrado que esto funcionaría:
Configure la variable de
grails-app/conf/Config.groovy
, en la sección apropiada para su entorno. Por ejemplo:environments { ... development { ... grails.config.myUrl = "http://localhost:3000" ...
...
Para acceder:
import grails.util.Holders class myClass { ... def static myStaticMethod() { def myVar = Holders.config.grails.config.myUrl ...
- 1. ¿Cómo se burla de un método estático de un objeto de dominio en Grails?
- 2. Modificar y validar un objeto de dominio Grails sin guardarlo
- 3. Alcance de Python/malentendido estático
- 4. Propiedad transitoria en el dominio Grails
- 5. Adición de clave de índice en el dominio Grails'
- 6. Grails/Groovy - Objeto de dominio - Mapa de sus propiedades
- 7. Alcance variable de miembro estático de C++
- 8. ¿Por qué Grails no me notifica el error al guardar el objeto de dominio?
- 9. ¿Cómo obtengo el tipo (clase) de una propiedad de un objeto de dominio Grails?
- 10. En Grails, ¿cómo accedo a la sesión de hibernación dentro de un método estático de clase de dominio?
- 11. ¿Cómo acceder a la configuración de Grails en Grails 2.0?
- 12. Cómo obtener más información sobre la aplicación Grails atascada en la configuración de la etapa classpath?
- 13. Campo de tiempo En la clase de dominio de grails
- 14. Obteniendo el tipo actual en un método genérico estático?
- 15. Obteniendo el tamaño de un Objeto Qt
- 16. addEventListener y el alcance de este
- 17. Configuración Server.ScriptTimeout de alcance global?
- 18. GWT serializa manualmente el objeto de dominio en el servidor
- 19. Obteniendo el objeto de una colección singleton
- 20. C#: obtener información sobre la computadora en el dominio
- 21. Configuración de ejecución de IntelliJ para el entorno de Grails
- 22. Obteniendo más información de Rprof()
- 23. Obteniendo el MethodInfo del método estático de una clase estática
- 24. Grails: Servicio de inyección en el objeto de comando
- 25. Haskell: obteniendo el tipo estático de una expresión
- 26. Administrar el alcance y el objeto de por vida dentro de los vectores STL
- 27. ¿Cuándo debo llamar a save() en una instancia de un objeto de dominio en Grails?
- 28. PHP isset ($ this) y utilizando el mismo método de objeto en un contexto estático y de objeto
- 29. Enlazando en Grails Objeto save()
- 30. Grails: dinámicamente inyectan servicio en la clase de dominio
Buena idea ... pero, el arranque falla con "Causado por: org.hibernate.InstantiationException: no se pudo instanciar la prueba objectqdcore.UserCallFlow "(qdcore.UserCallFlow es una clase de dominio), ya que parece que Hibernate está haciendo algo antes de que se ejecute Bootstrap. Para evitarlo, utilizo deref seguro (por ejemplo, grailsApplication? .config? .qdcore? .servers? .upload? .url) para que Hibernate esté contento, Bootstrap se ejecute y grailsApplication está disponible. ¡Gracias! – Wayne
Pero, incluso con deref seguro en el DO (def grailsApplication; def config = grailsApplication? .config; def String usrv = config? .qdcore? .servers? .upload? .url) Estoy obteniendo valores nulos, entonces I ' No lo estoy usando bien, aún bastante. Volveré a publicar cuando me solucione;) – Wayne
Lo que funciona en el DO es usar el alcance estático para la aplicación Grails y el alcance de la instancia para el resto; por ejemplo, clase UCF {static grailsApplication; def config = grailsApplication? .config; def String usrv = config? .qdcore? .servers? .upload? .url ...} No puedo usar el ámbito estático para los demás, ya que entonces tengo excepciones de que "grailsApplication" es nulo cuando intento obtener su propiedad de configuración. Esto es un poco nervioso, tal vez, ¡pero funciona para esta aplicación de creación de prototipos! – Wayne