首页 文章

使用非定期cron表达式groovy运行作业

提问于
浏览
0

config.groovy - >

Query
  {
      Map{
        time.'Tue Dec 30 14:48:00 EST 2014' =  ['T1']
        time.'Wed Dec 30 14:44:00 EST 2014'   =  ['T2']
        templates.'T1'   =  ['P1','P2','P3']
        templates.'T2'   =  ['Table']
         }    
  }
  Query
  {
       parameterValuesMap
       {
        parameterValues.'T1'   =  ['2014071600','2014072000','segment_id_file']
        parameterValues.'T2'   =  ['Elyon']
       }
  }

QuartzJob.groovy - >

import org.codehaus.groovy.grails.commons.GrailsApplication;

class MultipleJob 
{

    GrailsApplication grailsApplication;

    static triggers = {

       cron name: 'MultipleJobs', cronExpression: "* * * * * ?"
     }

     def execute() 
    {
        HashMap<String, String> parameter  =  new HashMap();
        grailsApplication.config.ais.Query.Map.time.each
        { k, v ->
              if(currentTime=="${k}")
              {
                      String templateId=v[0]
                      parameterKey = grailsApplication.config.Query.Map.templates.getAt("${v[0]}")
                      parameterValue = grailsApplication.config.Query.parameterValuesMap.parameterValues.getAt("${v[0]}")

                      for(int j=0;j<parameterKey.size();j++)
                      { 
                          parameter.put(parameterKey[j],parameterValue[j])
                      }

                      log.info(mediaQueryClient.executeQuery("0", templateId,"arbit", parameter))
              }    
        }

     }

}

我想分别在2014年东部时间12月30日14:48:00和2014年12月30日14:44:00 2014年T1和T2的不同时间执行相同的execute()方法(我总共有25个这样的模板并且所有都有不同的执行时间,无法通过单个cron表达式表示)有人可以提供一些示例代码,以便我如何在不同时间继续执行它们,我不知道应该保留什么cron表达式因为工作可能不会周期性地分开,因此我不能像每15分钟那样拥有一般的cron表达式?我们也可以在一个石英作业中创建多个cron表达式吗?请提供一些示例代码

1 回答

  • 1

    两次基本上同样的问题让我得到了它,但我想我看到你想要做的事情 .

    您似乎已将my answer to your previous question中的一两项建议纳入其中;随意接受它作为正确的答案:)你真的需要停止滥用GString表达式 - 你只是让事情变得更难 .

    我稍微修改了Config.groovy的东西:

    Query {
       Map {
          time = [
             'Tue Dec 30 14:48:00 EST 2014': 'T1',
             'Wed Dec 30 14:44:00 EST 2014': 'T2'
          ]
          templates = [
             T1: ['P1','P2','P3'],
             T2: ['Table']
          ]
       }
    
       parameterValues = [
          T1: ['2014071600','2014072000','segment_id_file'],
          T2: ['Elyon']
       ]
    }
    

    并将Quartz代码更改为:

    class MultipleJob {
    
       def grailsApplication
    
       static triggers = {
          cron name: 'MultipleJobs', cronExpression: "* * * * * ?"
       }
    
       void execute() {
    
          def parameter = [:]
    
          def queryMap = grailsApplication.config.Query.Map
          def queryValues = grailsApplication.config.Query.parameterValues
    
          queryMap.time.each { String time, String templateId ->
             if (currentTime != time) {
                return
             }
    
             List parameterKeys = queryMap.templates[templateId]
             List parameterValues = queryValues[templateId]
    
             parameterKeys.size().times { int j ->
                parameter[parameterKeys[j]] = parameterValues[j]
             }
    
             log.info(mediaQueryClient.executeQuery("0", templateId, "arbit", parameter))
          }
       }
    }
    

相关问题