作为一种定时器,quartz具有很大的方便性,今天我的第一篇博客就来写一个最简单的quartz的使用
使用maven进行结构的搭建,在这里简单介绍下maven的创建流程
右键new--Maven Project--选择quickstar--填写groupid和artifactId点击完成即可创建一个最简单的maven项目
以上便是创建的maven项目架构示例图
第一步,我们先修改pom.xml文件,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.imooc.demo</groupId> <artifactId>HelloQuartz</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>HelloQuartz</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
第二步,编写一个简单的需要被实现定时器的类
package foo; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.Trigger; import org.quartz.TriggerKey; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { //编写具体的业务逻辑 //打印当强时间 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("现在的时间是 : " + sf.format(date)); System.out.println("你好啊啊 啊"); // Trigger currenTrigger=context.getTrigger(); // System.out.println("开始时间是"+ sf.format(currenTrigger.getStartTime())); // System.out.println("结束时间是"+sf.format(currenTrigger.getEndTime())); // JobKey jobKey=currenTrigger.getJobKey(); // System.out.println("jobkey的相关参数"+jobKey.getName()+jobKey.getGroup()); } }
第三部 编写实现控制定时器的类,在这里我也写了一些常用的一些方法
package foo; import java.text.SimpleDateFormat; import java.util.Date; import javax.print.attribute.standard.JobSheets; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdJobRunShellFactory; import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler { public static void main(String[] args) throws Exception { //打印当前时间 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("现在的时间是 : " + sf.format(date)); //创建一个jobdetail实例,将该实例与hellojob类绑定 JobDetail jobDetail=JobBuilder.newJob(HelloJob.class) .withIdentity("myjob","group1").build(); //分别获取一些属性值 // System.out.println(jobDetail.getKey().getName());//myjob //System.out.println(jobDetail.getKey().getGroup());//group1 //System.out.println(jobDetail.getJobClass().getName());//foo.HelloJob //获取距离当前时间三秒后的时间 //date.setTime(date.getTime()+3000); //获取距离当前时间三秒后的时间 //Date endDate = new Date(); //endDate.setTime(endDate.getTime()+6000); //创建一个Triger实例,定义立即执行,并且两秒钟执行一次 // SimpleTrigger trigger=(SimpleTrigger) TriggerBuilder.newTrigger() // .withIdentity("myTriger","group1") // //.startAt(date) // //.endAt(endDate) // .withSchedule(SimpleScheduleBuilder.simpleSchedule() // .withIntervalInSeconds(2).repeatForever()).build(); //每秒钟刚出发一次任务 //* * * * * * * //秒 分 小时 日 月 周 年 //2017年每天十点十五分触发 //0 15 10 ? * * 2017 注意问号中英文区别 //每天的14点整到14点59分55秒,以及18点整到18点59分55秒,每五秒钟触发一次 //0/5 * 14,18 * * ? CronTrigger trigger=(CronTrigger) TriggerBuilder.newTrigger() .withIdentity("myTriger","group1") .withSchedule( CronScheduleBuilder.cronSchedule("* * * * * ?")) .build(); //创建Schedulers实例 SchedulerFactory sfact=new StdSchedulerFactory(); Scheduler scheduler=sfact.getScheduler(); //启动scheduler scheduler.start(); //将两者绑定在一起的,这个表达式返回的是即将执行操作的时间 scheduler.scheduleJob(jobDetail,trigger); //scheduler执行两秒后自动挂起,只是暂时的 Thread.sleep(2000L); scheduler.standby(); //挂起10秒后继续执行 Thread.sleep(10000L); scheduler.start(); } }
第四步 直接测试就好,最简单的一个测试例子,以后再写详细说明,不太懂,先用着吧