Quartz implements dynamic timing tasks

1. Explain that
    because the recent work needs to realize the execution of timed tasks, and the timed period is not fixed, so quartz is used to realize this function; find this description on the Internet, and make a note here!


    Versions below Spring 3.1 must use quartz1.x series, and versions above 3.1 support quartz 2.x, otherwise an error will occur. As for the reason, it is Spring's support for quartz, org.springframework.scheduling.quartz.CronTriggerBean inherits org.quartz.CronTrigger, org.quartz.CronTrigger is a class in quartz1.x series, and in quartz2.x series org.quartz.CronTrigger has become an interface, which makes it impossible to configure quartz triggers in Spring.

    The quartz version I use is 2.2.1, and I used 1.6 before, but it did not solve the synchronization problem of a high-frequency but long-running task, and 2.2.1 only needs to add an annotation, which is very convenient, so Happy to decide to switch to this version!
    The functions finally realized:
    1) When the project starts, the executable timed tasks are started, and the corresponding logic is executed on time;
    2) New tasks can be added, deleted, updated, suspended, and resumed;

2. Add quartz package

    I use Gradle builds the project, and only needs the following line when adding the package:
    compile "org.quartz-scheduler:quartz:2.2.1"
    or directly add the corresponding jar file to the project!


3. Configuration and use
    1. Configure the task scheduler (the corresponding file name is quartz-task.xml)
    

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
 default-lazy-init="false">
 <!-- scheduler-->
    <bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <!-- Configure the spring context through the applicationContextSchedulerContextKey property-->    
        <property name="applicationContextSchedulerContextKey">    
            <value>applicationContext</value>    
        </property>   
    </bean>  
    <!--Load executable tasks-->
    <bean id="loadTask" class="com.quartz.LoadTask" init-method="initTask" />

</beans>

    2. Loaded when the server starts, configured in the web.xml file

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:quartz-task.xml</param-value>
 </context-param>

 
    3. Load the class LoadTask.java for the executable task

public class LoadTask {
 public void initTask() throws Exception {
  Scheduler scheduler = schedulerFactoryBean.getScheduler();
  // list of executable tasks
  Collection<Task> taskList = taskService.findTask();
  for (Task task : taskList) {
   // Task name and task group setting rules:
   // name: task_1 ..
   // group: group_1 ..
   TriggerKey triggerKey = TriggerKey.triggerKey(
     "task_" + task.getId(), "group_" + task.getId());
   CronTrigger trigger = (CronTrigger) scheduler
     .getTrigger(triggerKey);
   // does not exist, create one
   if (null == trigger) {
    JobDetail jobDetail = JobBuilder
      .newJob(QuartzJobFactory.class)
      .withIdentity("task_" + task.getId(),
        "group_" + task.getId()).build();
    jobDetail.getJobDataMap().put("scheduleJob", task);
    // expression dispatch builder
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
      .cronSchedule(getCronExpression());
    // Build a new trigger by the new expression
    trigger = TriggerBuilder
      .newTrigger ()
      .withIdentity("task_" + task.getId(),
        "group_" + task.getId())
      .withSchedule(scheduleBuilder).build();
    scheduler.scheduleJob(jobDetail, trigger);
   } else {
    // The trigger already exists, then update the corresponding timing settings
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
      .cronSchedule(taskService.getCronExpression());
    // rebuild trigger by new cronExpression expression
    trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
      .withSchedule(scheduleBuilder).build();
    // Reset the job execution according to the new trigger
    scheduler.rescheduleJob(triggerKey, trigger);
   }
  }
 }
 @Autowired
 private SchedulerFactoryBean schedulerFactoryBean;
 @Autowired
 private  TaskService taskService;
}

    4. Entry for scheduling tasks

public class QuartzTaskFactory implements Job {
 
 @Override
 public void execute(JobExecutionContext context)
   throws JobExecutionException {
  // TODO Auto-generated method stub
  try {
   System.out.println("Task running...");
   Task task = (Task) context.getMergedJobDataMap().get(
     "scheduleJob");
   System.out.println("Task name: [" + task.getTaskName() + "]");
   // perform your task here...
   } catch (Exception e) {
   e.printStackTrace ();
  }
 }
}

 
    5. Pause the task
   

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.pauseJob(jobKey);

 
    6. Recovery tasks

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.resumeJob(jobKey);

 
    7. Delete tasks

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.deleteJob(jobKey);

 
    8. Run the task now

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.triggerJob(jobKey);

 
    9. Update task (time expression)

Scheduler scheduler = schedulerFactoryBean.getScheduler();
 
TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(),
scheduleJob.getJobGroup());
 
//Get trigger, that is, bean id="myTrigger" defined in the spring configuration file
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
 
//Expression dispatch builder
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob
.getCronExpression());
 
//Rebuild trigger by new cronExpression expression
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
.withSchedule(scheduleBuilder).build();
 
/ / According to the new trigger to reset the job execution
scheduler.rescheduleJob(triggerKey, trigger);

 
4. Time Expression Description

Field Allowed Values ​​Allowed Special Characters

Seconds 0-59 , – * /

Minutes 0-59 , – * /

Hours 0-23 , – * /

Dates 1-31 , – * ? / LWC

Months 1- 12 or JAN-DEC , – * /

week 1-7 or SUN-SAT , – * ? / LC

#year (optional) leave blank, 1970-2099 , – * /

expression meaning

"0 0 12 * * ?" Trigger

"0 15 10 ? * *" every day at 12:00am Trigger

"0 15 10 * * ?" every day at 10:15am Trigger

"0 15 10 * * ? *" every day at 10:15am Trigger

"0 every day at 10:15am 15 10 * * ? 2005" triggers "0 * 14 * * ?" every day at 10:15 am in 2005 and triggers "0 0/5 14 * * ?"

every 1 minute between 2 pm and 2:59 pm every day

Trigger

"0 0/5 14,18 * * ?" every 5 minutes between 2pm and 2:55pm every day and every 5th between 2pm and 2:55pm and every 5th between 2pm and 6:55pm Minute trigger

"0 0-5 14 * * ?" triggers "0 10,44 14 ? 3 WED" every 1 minute from 2pm to 2:05pm every day every

Wednesday at 2:00pm in March10 and 2:44 trigger

"0 15 10 ? *MON-FRI" 10:15 AM Monday to Friday

"0 15 10 15 * ?" triggers at 10:15 am on the 15th of every month

"0 15 10 L * ?" triggers at 10:15 am on the last day of every month

"0 15 10 ? * 6L" every last Friday of every month Trigger

"0 15 10 ? * 6L 2002-2005" at 10:15 am on the last Friday of every month from 2002 to 2005 triggers

"0 15 10 ? * 6#3" on the third Friday of every month at 10:15 am 10:15 AM Triggered

daily at 6:00 AM

6 * * *

every two hours

0 */2 * * *

every two hours between 11:00 PM and 8:00 AM, 8:00 AM

23-7/2, 8 * * *

On the 4th of every month and every Monday to Wednesday at 11:00

11 4 * 1-3

January 1st at 4:00

4 1 1 *

ok, the scheduled task has been executed correctly. ...

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326223825&siteId=291194637