Quartz 任務調度框架之Hello World
阿新 • • 發佈:2018-11-06
yun led factor tel 觸發 xsd 定時 get code
0x01 什麽是Quartz?
Quartz是一個完全由java編寫的開源作業調度框架。
0x02 實戰Quartz Hello World
創建Maven項目,POM 文件配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xingyun</groupId> <artifactId>quartz.sample</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Quartz Sample</name> <dependencies> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> </dependencies> </project>
創建一個定時需要執行的作業
HelloJob.java
import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job{ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //打印當前的執行時間 例如 2017-11-23 00:00:00 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("現在的時間是:"+ sf.format(date)); //具體的業務邏輯 System.out.println("Hello Quartz"); } }
這個作業很簡單,定時打印當前時間。
由於時間有關,因此我們需要一個工具類來做時間格式轉化
import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 將長時間格式字符串轉換為時間 yyyy-MM-dd HH:mm:ss * * @param strDate * @return */ public static Date strToDateLong(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } }
主方法調用
import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; public class MainTest { public static void main(String[] args) { // TODO Auto-generated method stub try { //創建一個jobDetail的實例,將該實例與HelloJob Class綁定 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build(); //創建一個Trigger觸發器的實例,定義該job立即執行,並且每2秒執行一次,一直執行 SimpleTrigger trigger = TriggerBuilder. newTrigger(). withIdentity("myTrigger"). startNow(). endAt(DateUtil.strToDateLong("2018-11-06 16:56:22")). withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2).repeatForever()).build(); //創建schedule實例 StdSchedulerFactory factory = new StdSchedulerFactory(); Scheduler scheduler = factory.getScheduler(); scheduler.start(); scheduler.scheduleJob(jobDetail,trigger); } catch (SchedulerException e) { // TODO Auto-generated catch block System.out.println(e.toString()); } } }
值得註意的一點:
我們定時任務從
2018-11-06 16:55:22開始任務調度當定時任務到
2018-11-06 16:56:22 之前停止任務調度
也就是說endAt 的含義是 當執行到 2018-11-06 16:56:20 時發現到達我們設置的終點值,此時終止任務調度。
而不是恰好等於2018-11-06 16:56:22
打印結果:
Quartz 任務調度框架之Hello World