5

我正在尝试使用Quartz 插件在我的 Grails Web 应用程序中设置一个 cron 作业。我目前只是尝试使用以下代码每秒执行一次测试作业:

class TestJob {
    private int counter = 0
    static triggers = {
        simple repeatInterval: 1000
    }

    def execute() {
        // execute job
        counter += 1
        System.out.println("Testing the cron " + counter)
    }
}

但是,当我运行该应用程序时,我只看到execute()两次第一次调用的初始输出:一次是在我收到服务器正在运行的警报之前,一次是之后。

| Loading Grails 2.1.0
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Compiling 1 source files.....
| Running Grails application
Testing the cron 1
| Server running. Browse to http://localhost:8080/QuartzTest
Testing the cron 1

有谁知道为什么我的 Quartz 工作可能无法正确触发?我尝试过使用 cron 而不是 simple 以及使用不同的参数、时间间隔等。没有什么不同。

谢谢

4

4 回答 4

12

我想我有类似的问题。您不得System.out.println在石英作业中使用。尝试使用log.error.

于 2012-07-13T19:42:47.693 回答
1

简单触发器有一个 repeatCount 字段。将其设置为 -1 以无限期执行:

simple name: "testName", repeatInterval: 1000, repeatCount: -1
于 2012-07-13T19:54:42.077 回答
0

在文档中,所有示例name在 triggers 块中都有一个参数:

static triggers = {
      simple name: "testName", repeatInterval: 1000      
}

我会先试一试,尽管文档还说如果没有给出默认值,将使用它。

于 2012-07-13T18:16:19.937 回答
0

我有同样的问题并得出了这个结论:

您可以在 Quartz Job 中使用 System.out.println。您必须将带有打印行的方法与执行方法分开。我只调用一种方法没有运气,但是当调用另外两种方法时,它会正确地重复打印行:

class TestJob {
    static triggers = {
    simple name: 'testTrigger', startDelay: 1000, repeatInterval: 1000, repeatCount: -1
    }

    def execute() {
        exampleMethod()
        anotherMethod()
    }

    def exampleMethod(){
        System.out.println("test")
    }

    def anotherMethod(){
        System.out.println("another method")
   }
}

这是输出:

| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Compiling 2 source files.....
| Running Grails application

Configuring Spring Security UI ...
... finished configuring Spring Security UI


Configuring Spring Security Core ...
... finished configuring Spring Security Core

test
another method
| Server running. Browse to http://localhost:8080/
test
another method
test
another method
test
another method
test
another method
test
another method

希望这对某人有帮助!

于 2013-11-07T15:58:38.520 回答