package cn.yishijie.simple;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author chenjianhui on 2019/11/19
*/
public class HelloQuartzJob implements Job {
//需要執行的任務放入在該方法下面
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//java8時間api,獲取當前時間
LocalDateTime localDateTime = LocalDateTime.now();
//java8用於時間的格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//打印輸入語句
System.out.println("hello quartz, time: "+ dateTimeFormatter.format(localDateTime));
}
}
具體quartz的一些類的解釋在註釋中:
package cn.yishijie.simple;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author chenjianhui on 2019/11/19
*/
public class HelloQuartz {
//這個是簡單的輸出任務,每隔一分鐘打印hello quartz
public static void main(String[] args) throws Exception{
//獲取定時任務工廠類
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//通過工廠獲取對應的scheduler實例,有異常要拋出,我這裏直接在方法上拋出了
Scheduler sched = schedulerFactory.getScheduler();
//job任務類,綁定HelloQuartzJob中需要執行的任務
JobDetail jobDetail0 = JobBuilder.newJob((Class<? extends Job>) HelloQuartzJob.class)
.withIdentity("j0", "jg0").build();
//定義觸發器,同時指定每分鐘執行一次,沒有指定開始時間,會馬上開始,我這裏指定了當前時間加上一分鐘,
//比如,你是定義了在 2019-11-19 11:24:23,那麼在 2019-11-19 11:25:01會調用第一次(他是不計後面的那個23的)
//如果不關閉這個任務,那麼以後每隔一秒都會調用一次
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("t0","tg0")
.startAt(Timestamp.valueOf(LocalDateTime.now().plusMinutes(1L)))
.withSchedule(CronScheduleBuilder.cronSchedule("1 * * * * ?")).build();
//綁定job和觸發器,一個job可以被多個觸發器使用,一個觸發器只能綁定一個job
sched.scheduleJob(jobDetail0, trigger);
//開啓定時任務
sched.start();
// 關閉定時任務,如果不關,會一直每隔一分鐘執行一次
// sched.shutdown(true);
// 結果: hello quartz, time: 2019-11-19 11:46:01
}
}