Quartz入门Demo(一)

介绍

Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。

Job:任务,实现该接口,实现execute方法,把任务放到execute中执行即可。
JobDetail:任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。
Trigger触发器:执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger
scheduler任务调度:是最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行。

导入Jar包

上官网 http://www.quartz-scheduler.org 下载对应的jar包,导入即可
使用maven对应的pom文件如下,大家自行添加version即可

            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
            </dependency>
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz-jobs</artifactId>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </dependency>

创建quartz.properties

在对应的包导入后,开始我们的demo了,首先配置我们的quertz,在resources文件加下创建quartz.properties文件,内容如下

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

创建log4j.properties

创建log4j.properties文件,调试输出日志,内容如下

log4j.rootCategory=DEBUG, stdout
log4j.rootLogger=DEBUG, stdout, FILE
#
### stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n

## \u8F93\u51FA\u6587\u4EF6\u914D\u7F6E ###
log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
log4j.appender.FILE.Append=true  
log4j.appender.FILE.File=./logs/root.log
log4j.appender.FILE.Threshold=DEBUG 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n  
log4j.appender.FILE.MaxFileSize=10MB  
#

把配置文件都搞好了开始写代码了

HelloJob.java

创建 HelloJob类,实现Job接口,重写execute方法,代码如下

package com.v.test;

import java.util.Date;

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

public class HelloJob implements Job{
    Logger _log = LoggerFactory.getLogger(HelloJob.class);
    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        // TODO Auto-generated method stub
        _log.info("Hello World! - " + new Date());
    }
}

QuartzTest.java

实现Runnable接口,不断创建Job任务,通过Scheduler调度任务,代码如下

package com.v.test;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;

import java.util.Date;

import org.junit.Test;
import org.quartz.JobDetail;

import static org.quartz.SimpleScheduleBuilder.*;

public class QuartzTest implements Runnable {
    public static Trigger trigger = null;
    public static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    public static Scheduler scheduler = null;

    public static void main(String[] args) {

        try {

            scheduler = schedulerFactory.getScheduler();
            Date runTime = new Date();
            // Trigger the job to run now, and then repeat every 40 seconds
            trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

            // and start it off
            scheduler.start();


        } catch (Exception se) {
            se.printStackTrace();
        }
        QuartzTest quartzTest = new QuartzTest();
        Thread thread = new Thread(quartzTest);
        thread.start();
    }

    @Override
    public void run() {
        while (true) {
            JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
            try {
                scheduler.scheduleJob(job, trigger);
                Thread.sleep(10000);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

运行日志如下

18:15:05,038  INFO - Using default implementation for ThreadExecutor
18:15:05,056  INFO - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
18:15:05,057  INFO - Quartz Scheduler v.2.2.1 created.
18:15:05,058  INFO - RAMJobStore initialized.
18:15:05,060  INFO - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'MyScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

18:15:05,060  INFO - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
18:15:05,061  INFO - Quartz scheduler version: 2.2.1
18:15:05,064  INFO - Scheduler MyScheduler_$_NON_CLUSTERED started.
18:15:05,064 DEBUG - batch acquisition of 0 triggers
18:15:05,068 DEBUG - batch acquisition of 1 triggers
18:15:05,070 DEBUG - Producing instance of Job 'group1.job1', class=com.v.test.HelloJob
18:15:05,074 DEBUG - batch acquisition of 0 triggers
18:15:05,075 DEBUG - Calling execute on job group1.job1
18:15:05,077  INFO - Hello World! - Mon May 01 18:15:05 CST 2017
18:15:06,058 DEBUG - Checking for available updated version of Quartz...
18:15:15,068 DEBUG - batch acquisition of 1 triggers
18:15:15,070 DEBUG - Producing instance of Job 'group1.job1', class=com.v.test.HelloJob
18:15:15,071 DEBUG - batch acquisition of 0 triggers
18:15:15,071 DEBUG - Calling execute on job group1.job1
18:15:15,071  INFO - Hello World! - Mon May 01 18:15:15 CST 2017

至此,整个demo完成

附上源码 QuartzDemo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值