Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建在一周中的特定日期执行的触发器(Quartz Scheduler API)_Java_Quartz Scheduler - Fatal编程技术网

Java 创建在一周中的特定日期执行的触发器(Quartz Scheduler API)

Java 创建在一周中的特定日期执行的触发器(Quartz Scheduler API),java,quartz-scheduler,Java,Quartz Scheduler,我正在尝试在Quartz Scheduler API中构建一个触发器,它应该按照以下条件执行 从特定日期开始(2012年1月25日) 在预定时间(上午8:00.00)开始 每周 可安排隔一周或每3周(如果不是每周) 在一周中的这些特定日子(星期一、星期二、星期五等) 我创建了以下表达式 newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup") .startAt(getTriggerExecutio

我正在尝试在Quartz Scheduler API中构建一个触发器,它应该按照以下条件执行

  • 从特定日期开始(2012年1月25日)
  • 在预定时间(上午8:00.00)开始
  • 每周
  • 可安排隔一周或每3周(如果不是每周)
  • 在一周中的这些特定日子(星期一、星期二、星期五等)
  • 我创建了以下表达式

    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
            .startAt(getTriggerExecutionDate(cronTriggerDTO))
            .withSchedule(calendarIntervalSchedule().withIntervalInWeeks 
                      (cronTriggerDTO.getWeeklyInterval())).build();
    
      int second = 53;//prepare from the time selected from UI(fire time)
      int minute=0;
      int hour=8;
      String dayOfWeek="1,3";//prepare it from the days you get from UI(give check box values as 1 for SUN,....)
    
      String cronExpression = String.format("%d %d %d ? * %s",second,minute , hour, dayOfWeek);
    
             newTrigger()
        .withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")//
        .withSchedule(cronSchedule(cronExpression)//
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .build();
    
    但是我很困惑我该如何在一周中的特定日子添加执行此触发器的条件

    这方面的任何帮助都将是巨大的


    提前感谢

    我会使用
    CronScheduleBuilder.cronSchedule(字符串cronExpression)
    ,如下所示:

    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * 1,2,5"))
        .build();
    

    我会使用
    CronScheduleBuilder.cronSchedule(字符串cronExpression)
    ,如下所示:

    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * 1,2,5"))
        .build();
    

    使用DailyTimeIntervalsScheduleBuilder

    Set daysOfWeek = new HashSet();
    daysOfWeek.add(1);
    daysOfWeek.add(2);
    daysOfWeek.add(5);
    
    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .withSchedule(dailyTimeIntervalSchedule()
           .onDaysOfTheWeek(daysOfWeek)
              .startingDailyAt(new TimeOfDay(8,0)))
        .build();
    

    使用DailyTimeIntervalsScheduleBuilder

    Set daysOfWeek = new HashSet();
    daysOfWeek.add(1);
    daysOfWeek.add(2);
    daysOfWeek.add(5);
    
    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .withSchedule(dailyTimeIntervalSchedule()
           .onDaysOfTheWeek(daysOfWeek)
              .startingDailyAt(new TimeOfDay(8,0)))
        .build();
    

    使用cron触发器,下面是准备cron表达式的简单方法

    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
            .startAt(getTriggerExecutionDate(cronTriggerDTO))
            .withSchedule(calendarIntervalSchedule().withIntervalInWeeks 
                      (cronTriggerDTO.getWeeklyInterval())).build();
    
      int second = 53;//prepare from the time selected from UI(fire time)
      int minute=0;
      int hour=8;
      String dayOfWeek="1,3";//prepare it from the days you get from UI(give check box values as 1 for SUN,....)
    
      String cronExpression = String.format("%d %d %d ? * %s",second,minute , hour, dayOfWeek);
    
             newTrigger()
        .withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")//
        .withSchedule(cronSchedule(cronExpression)//
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .build();
    

    然后安排作业。希望这对您有所帮助。

    使用cron触发器,下面是准备cron表达式的简单方法

    newTrigger().withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")
            .startAt(getTriggerExecutionDate(cronTriggerDTO))
            .withSchedule(calendarIntervalSchedule().withIntervalInWeeks 
                      (cronTriggerDTO.getWeeklyInterval())).build();
    
      int second = 53;//prepare from the time selected from UI(fire time)
      int minute=0;
      int hour=8;
      String dayOfWeek="1,3";//prepare it from the days you get from UI(give check box values as 1 for SUN,....)
    
      String cronExpression = String.format("%d %d %d ? * %s",second,minute , hour, dayOfWeek);
    
             newTrigger()
        .withIdentity(cronTriggerDTO.getTiggerId(), "simpleGroup")//
        .withSchedule(cronSchedule(cronExpression)//
        .startAt(getTriggerExecutionDate(cronTriggerDTO))
        .build();
    


    然后安排作业..,希望这对您有所帮助。

    我的值来自UI,我正在基于这些值构建。对于工作日,用户将单击工作日的复选框,否则我肯定会选择cron表达式为什么不基于UI中的值创建表达式?@user702325什么是
    cronTriggerDTO.getWeeklyInterval()
    返回?也许您可以将其调整为cron值。@Nacho
    getWeeklyInterval()
    只需返回int值,指示是否需要每周或交替触发etc@his:我同意表达式值,但我正在寻找某种内置机制来处理此问题。我的值来自UI,我正在基于这些值进行构建。对于工作日,用户将单击工作日的复选框,否则我肯定会选择cron expression为什么不基于UI中的值创建一个表达式?@user702325
    cronTriggerDTO.getWeeklyInterval()
    返回什么?也许您可以将其调整为cron值。@Nacho
    getWeeklyInterval()
    只需返回int值,指示是否需要每周或交替触发etc@his:我同意表达式值,但我正在寻找一些内置机制来处理此问题。它看起来不错,但我还必须设置周频率可能是某些用户希望设置触发器,但每两周执行一次,如
    CalendarIntervalsSchedule()。withIntervalInWeeks(2)
    我已经指出,在我的帖子中,条件3.添加了更多细节:)这使得您的需求过于复杂,无法为调度器使用生成器。使用建议的cron表达式:)看起来不错,但我还必须设置weekfrequency可能是某些用户希望使用everythig设置触发器,但每隔一周执行一次,如
    CalendarIntervalsSchedule()。使用IntervalinWeeks(2)
    我已经指出,在我的帖子中,条件3.添加了更多细节:)这使得您的需求过于复杂,无法为调度器使用生成器。使用建议的cron表达式:)我知道cron表达式,如果没有其他方法可以使用,那么我目前正在寻找的就是在quartz上使用一些内置机制,如果它在那里,我知道cron表达式,如果没有其他方法可以使用,目前我正在寻找的是使用一些内置的机械石英如果它有