我有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)。我的执行和触发器方法都是空的。
答案 0 :(得分:2)
据我了解,您从用户那里获取数据?你想保存这个数据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)})