Quartz提供了一些Scheduler(调度策略),以便我们管理和执行Job(任务)。
官网介绍:
二:源码下载Quartz是一个功能丰富、开源的任务调度库,它可以被集成到所有的Java程序,无论是很小的单节点还是规模庞大的商业系统。Quartz可以被用来创建简单或者复杂的调度策略,以执行成千上万的任务。任务一般是指一个标准的Java组件,实际上可以是你写代码指定的任何逻辑。Quartz Scheduler还包括很多企业级的特性,例如JTA事务控制和集群。
下载地址
三:怎么使用Quartz 大致步骤:
1. 创建SchedulerFactory 2. 创建Scheduler 3. 创建JobDetail 4. 创建Trigger 5. 注册到Scheduler:scheduler.scheduleJob(jobDetail, trigger) 6. 启动Scheduler:scheduler.start()实例代码
以非集群的RamJob为例
- RAMJob.java
package org.quartz.entity;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class RAMJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello Quartz: " + new Date() + " " + Thread.currentThread().getName());
}
}
- RAMJobTest.java
package org.quartz.entity;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class RAMJobTest {
public static void main(String[] args) throws SchedulerException{
//创建一个JobDetail实例,将该实例与HelloJob Class绑定
JobDetail jobDetail = JobBuilder.newJob(RAMJob.class)
.withIdentity("rmaJob", "rmaGroup").build();
//创建一个Trigger实例,定义该job立即执行,并且每隔2秒钟重复执行一次,直到程序停止
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("rmaTrigger", "rmaTriggerGroup").startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")).build();
//创建scheduler实例:
//创建一个ScheduleFactory
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
//打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前的时间为(HelloScheduler):" + sf.format(date));
//需要将jobDetail和trigger传进去,并将jobDetail和trigger绑定在一起。
scheduler.scheduleJob(jobDetail, trigger);
}
}
- 程序主要输出
D:javajdk1.8binjava.exe "-javaagent:D:ideaIntelliJ IDEA 2018.1.6libidea_rt.jar=60579:D:ideaIntelliJ IDEA 2018.1.6bin" -Dfile.encoding=UTF-8 -classpath D:javajdk1.8jrelibcharsets.jar;D:javajdk1.8jrelibdeploy.jar;D:javajdk1.8jrelibextaccess-bridge-64.jar;D:javajdk1.8jrelibextcldrdata.jar;D:javajdk1.8jrelibextdnsns.jar;D:javajdk1.8jrelibextjaccess.jar;D:javajdk1.8jrelibextjfxrt.jar;D:javajdk1.8jrelibextlocaledata.jar;D:javajdk1.8jrelibextnashorn.jar;D:javajdk1.8jrelibextsunec.jar;D:javajdk1.8jrelibextsunjce_provider.jar;D:javajdk1.8jrelibextsunmscapi.jar;D:javajdk1.8jrelibextsunpkcs11.jar;D:javajdk1.8jrelibextzipfs.jar;D:javajdk1.8jrelibjavaws.jar;D:javajdk1.8jrelibjce.jar;D:javajdk1.8jrelibjfr.jar;D:javajdk1.8jrelibjfxswt.jar;D:javajdk1.8jrelibjsse.jar;D:javajdk1.8jrelibmanagement-agent.jar;D:javajdk1.8jrelibplugin.jar;D:javajdk1.8jrelibresources.jar;D:javajdk1.8jrelibrt.jar;F:idea_resource_codequartzquartz-coretargettest-classes;F:idea_resource_codequartzquartz-coretargetclasses;D:Mavenrepositorycommchangec3p0 .9.5.5c3p0-0.9.5.5.jar;D:Mavenrepositorycommchangemchange-commons-java .2.19mchange-commons-java-0.2.19.jar;D:MavenrepositorycomzaxxerHikariCP3.4.5HikariCP-3.4.5.jar;D:Mavenrepositoryorgslf4jslf4j-api1.7.36slf4j-api-1.7.36.jar;D:Mavenrepositoryjavaxxmlbindjaxb-api2.3.1jaxb-api-2.3.1.jar;D:Mavenrepositoryjavaxactivationjavax.activation-api1.2.0javax.activation-api-1.2.0.jar;D:Mavenrepositoryorgapacheopenejbjavaee-api5.0-2javaee-api-5.0-2.jar;D:Mavenrepositoryorgslf4jslf4j-reload4j1.7.36slf4j-reload4j-1.7.36.jar;D:Mavenrepositorychqosreload4jreload4j1.2.19reload4j-1.2.19.jar;D:Mavenrepositorylog4jlog4j1.2.17log4j-1.2.17.jar;D:Mavenrepositoryorghamcresthamcrest-library1.2hamcrest-library-1.2.jar;D:Mavenrepositoryorghamcresthamcrest-core1.2hamcrest-core-1.2.jar;D:Mavenrepositoryorgmockitomockito-all1.9.5mockito-all-1.9.5.jar;D:Mavenrepositoryjunitjunit-dep4.8.2junit-dep-4.8.2.jar;D:Mavenrepositoryasmasm3.2asm-3.2.jar;D:Mavenrepositoryorgapachederbyderby10.8.2.2derby-10.8.2.2.jar;D:Mavenrepositoryorgapachederbyderbynet10.8.2.2derbynet-10.8.2.2.jar;D:Mavenrepositoryorgapachederbyderbyclient10.8.2.2derbyclient-10.8.2.2.jar org.quartz.entity.RAMJobTest 2022-04-26 22:20:34,724 INFO [org.quartz.impl.StdSchedulerFactory] - Using default implementation for ThreadExecutor 2022-04-26 22:20:34,768 INFO [org.quartz.simpl.SimpleThreadPool] - Job execution threads will use class loader of thread: main 2022-04-26 22:20:34,821 INFO [org.quartz.core.SchedulerSignalerImpl] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 2022-04-26 22:20:34,821 INFO [org.quartz.core.QuartzScheduler] - Quartz Scheduler v2.4.0-SNAPSHOT created. 2022-04-26 22:20:34,822 INFO [org.quartz.simpl.RAMJobStore] - RAMJobStore initialized. 2022-04-26 22:20:34,832 INFO [org.quartz.core.QuartzScheduler] - Scheduler meta-data: Quartz Scheduler (v2.4.0-SNAPSHOT) 'DefaultQuartzScheduler' 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 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 2022-04-26 22:20:34,832 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' 2022-04-26 22:20:34,832 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler version: 2.4.0-SNAPSHOT 2022-04-26 22:20:34,833 INFO [org.quartz.core.QuartzScheduler] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 当前的时间为(HelloScheduler):2022-04-26 22:20:34 Hello Quartz: Tue Apr 26 22:20:36 CST 2022 DefaultQuartzScheduler_Worker-1 Hello Quartz: Tue Apr 26 22:20:39 CST 2022 DefaultQuartzScheduler_Worker-2 Hello Quartz: Tue Apr 26 22:20:42 CST 2022 DefaultQuartzScheduler_Worker-3 Hello Quartz: Tue Apr 26 22:20:45 CST 2022 DefaultQuartzScheduler_Worker-4 Hello Quartz: Tue Apr 26 22:20:48 CST 2022 DefaultQuartzScheduler_Worker-5 Hello Quartz: Tue Apr 26 22:20:51 CST 2022 DefaultQuartzScheduler_Worker-6 Hello Quartz: Tue Apr 26 22:20:54 CST 2022 DefaultQuartzScheduler_Worker-7 Hello Quartz: Tue Apr 26 22:20:57 CST 2022 DefaultQuartzScheduler_Worker-8 Hello Quartz: Tue Apr 26 22:21:00 CST 2022 DefaultQuartzScheduler_Worker-9 Hello Quartz: Tue Apr 26 22:21:03 CST 2022 DefaultQuartzScheduler_Worker-10



