получение информации о конфигурации grails 2.0.0M1 в объекте домена и статической области видимости? - PullRequest
6 голосов
/ 08 августа 2011

Как мне получить информацию Config.groovy из объекта домена или из статической области? Сейчас я использую ConfigurationHolder.config. *, Но это и ApplicationHolder устарели, поэтому я хотел бы «сделать это правильно» ... но объект grailsApplication недоступен в DO / статической области.

Ответы [ 4 ]

19 голосов
/ 28 мая 2013

Замена Grails 2 для устаревших ApplicationHolder, ConfigurationHolder и т. Д. - grails.util.Holders, которая обеспечивает те же функции, но безопасна, когда несколько разных веб-приложений в одном и том жеконтейнер разделяет одну копию JAR-файлов Grails в родительском загрузчике классов (в этом случае старые владельцы сломались).

import grails.util.Holders

// ...

static void foo() {
  def configOption = Holders.config.myapp.option
}
8 голосов
/ 08 августа 2011

Я бы добавил grailsApplication к метаклассу доменных классов - это то, что я думаю сделать для 2.0 final. А пока поместите его в BootStrap.groovy, например

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      for (dc in grailsApplication.domainClasses) {
         dc.clazz.metaClass.getGrailsApplication = { -> grailsApplication }
         dc.clazz.metaClass.static.getGrailsApplication = { -> grailsApplication }
      }      
   }
}

Затем вы можете получить доступ к конфигурации из grailsApplication.config, а Spring bean через grailsApplication.mainContext.getBean('foo') или просто grailsApplication.mainContext.foo.

1 голос
/ 10 сентября 2014

В Grails 2.2.5 я обнаружил, что это будет работать:

  1. Настройте переменную в grails-app/conf/Config.groovy, в разделе, соответствующем вашей среде. Например:

    environments {
    ...
      development {
      ...
        grails.config.myUrl = "http://localhost:3000"
        ...
    

    ...

  2. Для доступа:

    import grails.util.Holders
    
    class myClass {
    ...
    
       def static myStaticMethod() {
          def myVar = Holders.config.grails.config.myUrl
    ...
    
1 голос
/ 28 мая 2013

Я действительно хотел получить доступ к конфигурации только в статических утилитах. После поиска и прочтения большинства ответов по SO, я пришел с простым решением (может быть кому-нибудь пригодится):

Добавить класс держателя под src / groovy:

class StaticContext {
    static def app;
}

инициализировать его в инициализации начальной загрузки

class BootStrap {

    def grailsApplication

    def init = { servletContext ->
      StaticContext.app = grailsApplication
    }

    def destroy = {
    }
}

И доступ к нему в статических утилитах:

//In my case Solr URL in single ton
def solrUrl = StaticContext.app.config.solr.url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...