асинхронная начальная загрузка Grails

Можно ли использовать службу асинхронно в классе начальной загрузки Grails? Я пытаюсь сделать следующее в grails-2.0.4 и в grails-executor-plugin, но появляется только первое сообщение журнала:

class BootStrap {

def myService

def init = { servletContext ->

    log.info("Bootstrapping")

    runAsync {
        log.info("Doing myService async ")
        myService.doSomething()
    }

}

Нет сообщения об ошибке, просто нет вывода из второго оператора журнала. Заранее большое спасибо!


person Wolf Wetzel    schedule 18.06.2012    source источник
comment
Как насчет того, чтобы начать тему? Я помню, что делал это в проекте, но не помню, использовал ли я классовые сервисы или нет?   -  person Houcem Berrayana    schedule 18.06.2012
comment
Ага! Хорошая идея: я пробовал следующее: def th = Thread.start { log.info(Autowarming Imprints async) myService.doSomething() }   -  person Wolf Wetzel    schedule 18.06.2012
comment
Да, это работает — смотрите мой код выше в комментарии! Спасибо   -  person Wolf Wetzel    schedule 18.06.2012


Ответы (1)


Удалите runAsync закрытие - это неподходящее место для него. Здесь вы можете использовать замыкания типа production и development для разных сред:

class BootStrap {

def myService

def init = { servletContext ->
    log.info("Bootstrapping")
    development {
        log.info("Doing myService async ")
        myService.doSomething()
    }
}

class MyService {
    def doSomething() {
        runAsync {
            // executed asynchronously
        }
    }
}
person Tomasz Kalkosiński    schedule 18.06.2012
comment
@WolfWetzel Я обновил свой ответ. runAsyc не работает в Bootstrap, потому что он не расширен. Расширяются только домены, контроллеры и сервисы. Проверьте мое решение и не создавайте собственные темы. - person Tomasz Kalkosiński; 18.06.2012
comment
Большое спасибо - ваше предложение работает. Я поместил runAsync-Closure в свой класс обслуживания, и меня это устраивает! - person Wolf Wetzel; 18.06.2012