Quartz 版本 截至目前(2018-3-23),使用的是 2.2.3 版本 TestQuartz 几个概念搞清楚先:触发器 Trigger: 什么时候工作任务 Job: 做什么工作调度器 Scheduler: 搭配 Trigger和Job代码里注释很清楚,直接看注释即可理解 public class TestQuartz {
public static void main(String[] args) throws Exception{
//创建调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//定义一个触发器
Trigger trigger = newTrigger().withIdentity("trigger1", "group1") //定义名称和所属的租
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(2) //每隔2秒执行一次
.withRepeatCount(10)) //总共执行11次(第一次执行不基数)
.build();
//定义一个JobDetail
JobDetail job = newJob(MailJob.class) //指定干活的类MailJob
.withIdentity("mailjob1", "mailgroup") //定义任务名称和分组
.usingJobData("email", "admin@10086.com") //定义属性
.build();
//调度加入这个job
scheduler.scheduleJob(job, trigger);
//启动
scheduler.start();
//等待20秒,让前面的任务都执行完了之后,再关闭调度器
Thread.sleep(20000);
scheduler.shutdown(true);
}
} MailJob MailJob 实现了 Job 接口,提供 execute,干具体的活儿 public class MailJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDetail detail = context.getJobDetail();
String email = detail.getJobDataMap().getString("email");
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String now = sdf.format(new Date());
System.out.printf("给邮件地址 %s 发出了一封定时邮件, 当前时间是: %s%n" ,email, now);
}
} 分组干什么用? .withIdentity("mailjob1", "mailgroup")mailgropu就是分组的意思。比如一个系统有3个job 是备份数据库的,有4个job 是发邮件的,那么对他们进行分组,可以方便管理,类似于一次性停止所有发邮件的这样的操作. 静态导入 import static 这种写法叫做静态导入,指的是导入某个类的静态方法, 这样就可以直接使用了,而不是写成: JobBuilder.newJob() log4j.xml log4j 放在这里,只开放error以上的日志信息,否则看上去乱哄哄的 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="default" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
</layout>
</appender>
<logger name="com.how2java">
<level value="error" />
</logger>
<root>
<level value="error" />
<appender-ref ref="default" />
</root>
</log4j:configuration>