java 任务调度:
public class TimeTaskDemo { public static void main(String[] args) { Timer timer=new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("==========>"); } },new Date(System.currentTimeMillis()+1000), 200); } }
一、Quartz
Quartz就是一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细.。
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述。
Quartz 调度包的两个基本单元是作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度.
调度器:调度器用于将与作业触发器关联,一个作业可关联多个触发器,这样每个触发器被可以触发的作业执行;一个触发器可用于控制多个作业,触发触发器时,
全部作业将获得调度。Quartz的调度器由Scheduler接口体现.。
job(作业):只需实现org.quartz.job接口即可.Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,Quartz确定作业运作的时候,它将调用 execute()方法体。 Job是一个接口只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap实例中 。
触发器:有SimpleTrigger和CronTrigger两种类型。
1、创建一个作业
public class HelloJob { private static Logger logger = LoggerFactory.getLogger(HelloJob.class); public HelloJob() { } public void execute(JobExecutionContext context) throws JobExecutionException { logger.error("我是小禾点点: " + new Date()); } }
2、调度
public static void run() throws Exception { // 通过SchedulerFactory获取一个调度器实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //引进作业程序 JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job2", "group1").build(); //创建触发器并设置执行时间 CronTrigger trigger =TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")).build(); //作业和触发器设置到调度器中 Date ft = scheduler.scheduleJob(job, trigger); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: " + trigger.getCronExpression()); //启动调度器 scheduler.start(); //scheduler.shutdown(); }