多线程_高级主题_quartz

使用Timer和TimerTask可以实现很简单的任务调度。如果遇到比较复杂的,推荐使用quartz,石英表。QUARTZ称为任务调度框架。这个框架由四大部分组成:
1、Scheduler:调度器,控制所有的调度;
2、Trigger:触发条件,采用DSL模式;
3、JobDetail:需要处理的JOB;
4、Job:执行逻辑;
【这个框架已经集成到高级框架Spring里面了,后期一定会遇到它,重点关注这四个部分】

在我们用Trigger和JobDetail的时候我们会遇到一个模式叫流模式,就是不断的点点点,这个模式实际上叫DSL模式,这个DSL模式叫领域特定语言或者领域专用语言,意思就是用简洁的代码来表示特殊的含义,来快速解决特殊的问题。比如说StringBuilder里面的append,看过源码就知道它里面返回的是this,有了这个this就可以不断的点下去,那我们就不需要接收这个对象的引用了,可以多次操作。
这个流模式叫做Method Chaining方法链,它内部有一个builder,这个DSL模式还有另外的实现,比如说:
在这里插入图片描述

QUARTZ如何获得呢?
需要从官网www.quartz-scheduler.org获得,不过要借助VPN。
在遇到一个新的知识、框架的时候,看它的API,看它的文档或者使用手册,也可以参考它写好的示例。

建议quartz不要自己去写,直接去拷贝写好的example。

package com.sxt.others;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 任务
 * 
 * @author 
 *
 */
public class HelloJob implements Job {

    public HelloJob() {
    }

    public void execute(JobExecutionContext context)
        throws JobExecutionException {
    	System.out.println("-------start---------");
        System.out.println("Hello World! - " + new Date());
        System.out.println("-------end---------");
    }
}



package com.sxt.others;

import static org.quartz.DateBuilder.evenSecondDateAfterNow;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
/**
* quartz学习入门
* @author
*
*/
public class Quartz{

  public void run() throws Exception {
    
    // 1、创建Scheduler的工厂
    SchedulerFactory sf = new StdSchedulerFactory();
    // 2、从工厂中获取调度器
	Scheduler sched = sf.getScheduler();

    // 3、创建JobDtail
    JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();

	// 时间
    Date runTime = evenSecondDateAfterNow();
    // 4、触发条件
    //Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
	Trigger tigger = newTigger().withldentity("tigger1","group1").startAt(runTime)
		.withSchedule(simpleSchedule().withlntervallnSeconds(5).withRepeatCount(3)).build();
    // 5、注册任务和触发条件
    sched.scheduleJob(job, trigger);
    
	// 6、启动
    sched.start();

    try {
      // 100秒后停止
      Thread.sleep(100L * 1000L);
    } catch (Exception e) {
    }
    sched.shutdown(true);
  }

  public static void main(String[] args) throws Exception {
    QuartzTest example = new QuartzTest();
    example.run();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值