Кварц Schedular в Граалях - PullRequest
       25

Кварц Schedular в Граалях

0 голосов
/ 11 января 2012

У меня есть класс OperationLog, и я создаю 1000 записей с информацией, предоставленной другим классом, называемым Validator.

def list = {
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [operationLogInstanceList: OperationLog.list(params), operationLogInstanceTotal: OperationLog.count()]
    }

    def create = {
        def operationLogInstance = new OperationLog()
        operationLogInstance.properties = params
        operationLogInstance.validator = Validator.get(params.validatorId)
        operationLogInstance.operation = Operation.get(params.operationId)
        return [operationLogInstance: operationLogInstance]
    }

    def save = {
        int i = 0;
    1000.times {
        def operationLogInstance = new OperationLog(params)
        operationLogInstance.validator = Validator.get((i));
        operationLogInstance.save(flush: true)                   
        i ++;
    }
    redirect(action: "list")
    }
}

У меня такой вопрос.Как я могу создать эти записи одну за другой с помощью кварцевого планировщика, и каждая из них должна быть сохранена за 5 минут.

Примечание: Я уже создал задание (MyJob.groovy).У меня все методы выполнения и триггеров пустые.

1 Ответ

2 голосов
/ 11 января 2012

Насколько я вас понимаю, вы получаете данные от пользователя? И вы хотите сохранить эти данные 1000 раз, каждые 5 минут один? Итак, вы хотите вызвать службу для этого (данные в качестве параметра)?

Так что это может быть сделано через потоки (где угодно, должно также работать в контроллерах ...

Thread.start {
    1000.times {
        def operationLogInstance = new OperationLog(params)
        println(params.validator)
        operationLogInstance.validator = Validator.get(params.validator.id);
        operationLogInstance.save(flush: true)                   
    }
    wait(300000)
}

Может быть, существует необходимый OperationLog.withSession {...} вокруг него.

В качестве альтернативы вы можете выполнить задание quatz (используя сервис, который сохраняет журналы, которые вы хотите сохранить ...), выглядя так:

class OperationLogJob {

static triggers = {
    simple name:'Operation Save', startDelay:0, repeatInterval:300000
}

def sessionRequired = true

def concurrent = false

def operationsLogService

def execute() {
    def operationLogInstance = operationsLogService.getLogsToSave()
    if(operationLogInstance) {
            operationLogInstance.validator = Validator.get(params.validator.id);
            operationLogInstance.save(flush: true)                   
        }
    }       
}

}

Метод operationsLogService.getLogsToSave () возвращает (и удаляет) значение из стека, которое можно заполнить в методе контроллера (например, 1000.times {operationsLogService.addLog (log)})

...