一、QUARTZ 教程

TestQuartz

 
几个概念搞清楚先:
触发器 Trigger: 什么时候工作
任务 Job: 做什么工作
调度器 Scheduler: 搭配 Trigger和Job

代码里注释很清楚,直接看注释即可理解
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.how2java;
 
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
 
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
 
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,干具体的活儿
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.how2java;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
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")
 

mailgroup就是分组的意思。
比如一个系统有3个job 是备份数据库的,有4个job 是发邮件的,那么对他们进行分组,可以方便管理,类似于一次性停止所有发邮件的这样的操作.
 

静态导入


 
import static 这种写法叫做静态导入,指的是导入某个类的静态方法, 这样就可以直接使用了,而不是必须写成:
 
JobBuilder.newJob()
 
静态导入

log4j.xml

log4j 放在这里,只开放error以上的日志信息,否则看上去乱哄哄的
log4j.xml
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>
运行 TestQuartz ,看到如图所示的效果,每隔2秒钟,总共运行11次
先运行,看到效果,再学习

 

下载

http://download.how2j.cn/1718/quartz.rar

posted on 2019-01-04 14:55  我是司  阅读(275)  评论(0)    收藏  举报

导航