2012-01-11 8 views
0

私はOperationLogクラスを持っています。私はValidatorという別のクラスから提供された情報で1000レコードを作成します。クォーツスケルトン(Grails)

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") 
    } 
} 

私の質問はこれです。石英スケジューラの助けを借りて、これらのレコードを1つずつ作成するにはどうすればよいですか?それぞれを5分で保存する必要があります。

注:私は既にジョブ(MyJob.groovy)を作成しました。私は自分の実行メソッドとトリガーメソッドをすべて空にします。

答えて

2

私が理解している限り、あなたはユーザーからデータを受け取りますか?このデータを5分ごとに1000回保存するとしますか? これを行うサービス(パラメータとしてのデータ)を呼び出すには?だから、これはどこか、また、コントローラで動作するはずのスレッド(を経由して行うことができる

...

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 {...}がありますように。

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.getLogsT:別の方法としては、このように見て(...保存したいログを保存サービスを使用して)quatz仕事を養うことができoSave()メソッドは、コントローラメソッドを埋めることができるスタックから値を返す(そして削除する)。 1000×{operationsLogService.addLog(log)})

+0

ご回答ありがとうございます。バリデータの情報はdbから来て、すべてのバリデータオブジェクトを呼び出すだけです。 'operationLogInstance.validator = Validator.get((i))' (私の質問のコード修正を参照してください) – supp