1. 태스크
Job: void 실행(JobExecutionContext 컨텍스트) 메소드가 하나만 있는 인터페이스입니다. 개발자는 실행 중인 태스크를 정의하기 위해 이 인터페이스를 구현합니다. JobExecutionContext 클래스는 스케줄링 컨텍스트에 대한 다양한 정보를 제공합니다. Job 런타임 정보는 JobDataMap 인스턴스에 저장됩니다.
2. Trigger
Trigger: Job 실행을 트리거하는 시간 트리거 규칙을 설명하는 클래스입니다. SimpleTrigger와 CronTrigger라는 두 가지 주요 하위 클래스가 있습니다. 한 번만 트리거하거나 고정된 시간 간격으로 실행해야 하는 경우 SimpleTrigger가 가장 적합한 선택이지만 CronTrigger는 Cron 표현식을 통해 매일 아침 9시, 월요일, 수요일, 금요일 오후 5시에 실행 등;
3. 스케줄러
JobDetail: Quartz는 Job을 실행할 때마다 Job 인스턴스를 다시 생성하므로 직접적으로 받아들이지 않습니다. 대신 Job 인스턴스는 Job 구현 클래스를 수신하므로 런타임에 newInstance()의 리플렉션 메커니즘을 통해 Job이 인스턴스화될 수 있습니다. 따라서 Job 구현 클래스를 설명하는 클래스가 필요하며 Job 이름, 설명, 관련 리스너 및 기타 정보와 같은 기타 관련 정적 정보가 이 역할을 맡습니다.
Quartz 작업 생성
1. 기획 엔터티 클래스
/** * *计划实体类 */ public class Plan { private String date; private String task; public Plan(String date, String task) { this.date = date; this.task = task; } public Plan() { } @Override public String toString() { return "Plan [date=" + date + ", task=" + task + "]"; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTask() { return task; } public void setTask(String task) { this.task = task; } }
2. 알림 서비스 클래스
/** * * @提醒服务类 * */ public class RemindService { //数据查询 public List<Plan> getPlansForToday(){ List<Plan> list=new ArrayList<Plan>(); Plan p1=new Plan("2016-11-3","呵呵"); Plan p2=new Plan("2016-11-4","嘿嘿"); list.add(p1); list.add(p2); return list; } //提醒服务类 public void ouputPlan(){ List<Plan> forToday = getPlansForToday(); for (Plan plan : forToday) { System.out.println("计划时间"+plan.getDate()+"计划内容"+plan.getTask()); } } }
3. 🎜>
/** * * @提醒任务类 * */ public class RemindJob implements Job { private RemindService service=new RemindService(); public void execute(JobExecutionContext arg0) throws JobExecutionException { service.getPlansForToday(); } public RemindService getService() { return service; } public void setService(RemindService service) { this.service = service; } }
public class TestJob { public static void doRemind() throws SchedulerException, InterruptedException{ //创建一个任务 JobDetail job =JobBuilder.newJob(RemindJob.class).withIdentity("job1", "group1").build(); //创建一个触发器 /*Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(TriggerKey.triggerKey("myTrigger", "myTriggerGroup")) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(2)) .startAt(new Date(System.currentTimeMillis()+2000)) .build();*/ Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1"). withSchedule(CronScheduleBuilder.cronSchedule("0 34 16 ? * 5#1 2016")).build(); SchedulerFactory s=new StdSchedulerFactory(); Scheduler scheduler = s.getScheduler(); //注册并进行调度 scheduler.scheduleJob(job,trigger); //启动调度 scheduler.start(); //睡眠10s //Thread.sleep(10000); //关闭调度 //scheduler.shutdown(); } public static void main(String[] args) throws SchedulerException, InterruptedException { doRemind(); } }