Grails背景线程,石英

时间:2010-10-27 06:31:33

标签: grails

我正在开发一个足球经理网站,但我无法弄清楚如何正确使用后台线程插件和Quartz插件(没有太多的文档)。 我的问题是...... 我有一个Match类的Controller,有一个我需要在一段时间内启动的函数。 有石英,我试图创建一个工作,但我不能直接调用该函数(如果我有更多的匹配开始,我应该创建多少工作?)或者我不知道如何做,并使用后台线程我创建了服务类,但后来我不知道如何实现它。 有人可以帮我这个吗? 感谢

修改

此帖中的解决方案:

grails thread -> hibernateException: No Hibernate session bound to thread

2 个答案:

答案 0 :(得分:1)

有些时候只需要保持tryng :) 用石英我喜欢这个:

class TestJob {

    MatchController match = new MatchController()

    static triggers = {
        /*
         * firstThread runs every minute from 8 to 9:59 on wednsday
         */
        cron name: 'firstThread', cronExpression: "0 0/1 8-9 ? * WED"
        cron name: 'secondThread', cronExpression: "0 0/5 8-9 ? * WED"
        cron name: 'thirdThread', cronExpression: "0 0/10 8-9 ? * WED"
        cron name: 'forthThread', cronExpression: "0 0/15 8-9 ? * WED"
    }

    def group = "MyGroup"

    def execute() {
        /*
         *  execute task
         *  call playMatch from match controller
         */
        println "run thread: "
            + String.format('%tH:%<tM:%<tS.%<tL',System.currentTimeMillis())

        match.playMatch()
    }
}

似乎工作。 但仍然想知道我使用后台线程

答案 1 :(得分:1)

后台线程被设计为一个简单的插件,就像顾名思义一样 - 在后台线程中运行一些代码。

它没有给你一个后台线程的句柄(我记得),所以它只是一个'设置并忘记'类型的东西。

Quartz是您想要做的正确选择。我可能不会让Job调用控制器。 “打一场比赛”的逻辑听起来应该是在服务中。您可以将您的服务注入到Job类中,就像在控制器中一样。

欢呼声