Java任务调度框架:Quartz
由四大部分组成:
-
Scheduler--->调度器,控制所有的调度
-
Trigger--->触发条件,采用DSL模式
-
DSL:--->Domain-specific language领域特定语言,受限表达下的一种计算机程序语言。声明式编程
-
Method Chaining 方法链(流模式)
-
Fluent Style 流畅风格
-
Builder 模式构建器
-
-
Nested Functions 嵌套函数
-
Lambda Expressions/Closures
-
Functional Sequence
-
-
-
JobDetail--->需要处理的JOB
-
Job--->执行逻辑
已经集成到了Sprint里面
-
解压
-
IDEA中导入该jar包
-
File--->Project Structure--->选择该项目--->点击项目左上角"+"号--->选择"JAR or directories"--->找到解压路径下的lib目录下的文件--->选择OK
-
该框架需要有log4j.xml作为数据传输格式
实例demo
package thread.quartz;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.DateBuilder.evenSecondDateAfterNow;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* Quartz Introduction to learning
* @since JDK 1.8
* @date 2021/6/22
* @author Lucifer
*/
public class QuartzTestNo2 {
public void run() throws Exception {
// 由于调度器来自于调度器工厂--->创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
// 从工厂中获取调度器--->初始化完毕
Scheduler sched = sf.getScheduler();
// 创建JobDetail
JobDetail job = newJob(QuartzTestNo1.class).withIdentity("job1", "group1").build();
// 时间
// Date runTime = evenMinuteDate(new Date()); //这是一个静态方法,有分钟和秒
Date runTime = evenSecondDateAfterNow();
// 触发条件
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
// 注册任务和触发条件
sched.scheduleJob(job, trigger);
// 开始调用--->启动
sched.start(); //一看到start方法就知道是多线程
try {
// 5s后停止线程
Thread.sleep(5L * 1000L);
// executing...
} catch (Exception e) {
//
}
}
public static void main(String[] args) throws Exception {
SimpleExample example = new SimpleExample();
example.run();
}
}