网页设计与网站建设毕业设计,wordpress默认编辑器功能增强,wordpress 屏蔽国外ip,怎样自学开网店Scheduler 每次执行#xff0c;都会根据JobDetail创建一个新的Job实例#xff0c;这样就可以规避并发访问的问题#xff08;jobDetail的实例也是新的#xff09;
Quzrtz 定时任务默认都是并发执行#xff0c;不会等待上一次任务执行完毕#xff0c;只要间隔时间到就会执…Scheduler 每次执行都会根据JobDetail创建一个新的Job实例这样就可以规避并发访问的问题jobDetail的实例也是新的
Quzrtz 定时任务默认都是并发执行不会等待上一次任务执行完毕只要间隔时间到就会执行如果定时任务执行太长会长时间占用资源导致其它任务堵塞 DisallowConcurrentExecution: job类上禁止并发地执行同一个job定义 (JobDetail定义的)的多个实例。 scheduler可以理解为定时任务的工作容器或者说是工作场所所有定时任务都是放在里面工作可以开启和停止。trigger可以理解为是定时任务任务的工作规则配置例如说没个几分钟调用一次或者说指定每天那个时间点执行。jobDetail定时任务的信息例如配置定时任务的名字群组之类的。job定时任务的真正的业务处理逻辑的地方。
简单示例
TestClient.Java
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class TaskClient {public static void main(String[] args) {JobDetail jobDetail JobBuilder.newJob(TaskJob.class).withIdentity(job1, group1) //设置JOB的名字和组.build();Trigger trigger TriggerBuilder.newTrigger().withIdentity(trigger1, trigger1).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();try {Scheduler scheduler StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(jobDetail,trigger);scheduler.start();} catch (SchedulerException ex) {ex.printStackTrace();}}}
TaskJob.Java
import cn.hutool.core.date.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class TaskJob implements Job {Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println(TaskJob DateUtil.now());}
}usingJobData
通过 usingJobData 往定时任务中传递参数
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class TaskClient {public static void main(String[] args) {JobDetail jobDetail JobBuilder.newJob(TaskJob.class).withIdentity(job1, group1).usingJobData(job,jobDetail1.JobDataMap.Value).build();Trigger trigger TriggerBuilder.newTrigger().withIdentity(trigger1, trigger1).usingJobData(trigger,trigger.JobDataMap.Value).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();try {Scheduler scheduler StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(jobDetail,trigger);scheduler.start();} catch (SchedulerException ex) {ex.printStackTrace();}}}TaskJob.java
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class TaskJob implements Job {Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {JobDataMap jobDataMap context.getJobDetail().getJobDataMap();JobDataMap triggerMap context.getTrigger().getJobDataMap();JobDataMap mergeMap context.getMergedJobDataMap();System.out.println(jobDataMap jobDataMap.getString(job));System.out.println(triggerMap triggerMap.getString(trigger));System.out.println(mergeMap mergeMap.getString(trigger));}
} 通过 属性赋值
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class TaskClient {public static void main(String[] args) {JobDetail jobDetail JobBuilder.newJob(TaskJob.class).withIdentity(job1, group1).usingJobData(job,jobDetail1.JobDataMap.Value).usingJobData(name,jobDetail1.name.Value) //通过 setName 自动赋值.build();Trigger trigger TriggerBuilder.newTrigger().withIdentity(trigger1, trigger1).usingJobData(trigger,trigger.JobDataMap.Value).usingJobData(name,trigger.name.Value) //如果 Trigger 有值会覆盖 JobDetail.startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();try {Scheduler scheduler StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(jobDetail,trigger);scheduler.start();} catch (SchedulerException ex) {ex.printStackTrace();}}}
import org.quartz.*;public class TaskJob implements Job {private String name;public void setName(String name) {this.name name;}Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println(name name);}
}非并发执行 DisallowConcurrentExecution job类上禁止并发地执行同一个job定义 (JobDetail定义的)的多个实例。
import cn.hutool.core.date.DateUtil;
import org.quartz.*;DisallowConcurrentExecution
public class TaskJob implements Job {Overridepublic void execute(JobExecutionContext context) {System.out.println(Time DateUtil.now());try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}
} PersistJobDataAfterExecution 持久化JobDetail中的JobDataMap对 trigger 中的 datamap 无效如果一个任务不是
import cn.hutool.core.date.DateUtil;import org.quartz.*;//持久化JobDetail中的JobDataMap对 trigger 中的 datamap 无效如果一个任务不是
PersistJobDataAfterExecution
public class TaskJob implements Job {Overridepublic void execute(JobExecutionContext context) {JobDataMap triggerMap context.getJobDetail().getJobDataMap();triggerMap.put(count, triggerMap.getInt(count) 1);System.out.println(Time DateUtil.now() count triggerMap.getInt(count));}
}Client
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class TaskClient {public static void main(String[] args) {JobDetail jobDetail JobBuilder.newJob(TaskJob.class).withIdentity(job1, group1).usingJobData(job,jobDetail1.JobDataMap.Value).usingJobData(name,jobDetail1.name.Value) //通过 setName 自动赋值.usingJobData(count,0) //通过 setName 自动赋值.build();Trigger trigger TriggerBuilder.newTrigger().withIdentity(trigger1, trigger1).usingJobData(trigger,trigger.JobDataMap.Value).usingJobData(name,trigger.name.Value) //如果 Trigger 有值会覆盖 JobDetail.startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();try {Scheduler scheduler StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(jobDetail,trigger);scheduler.start();} catch (SchedulerException ex) {ex.printStackTrace();}}}