日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Java基于Quartz的定时任务调度服务(一)

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基于Quartz的定时任务调度服务(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Quartz的基本用法

一 Quartz的簡單介紹

  1. Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基于 Java 實現,一個優秀的開源調度框架,其特點是:強大的調度能力.靈活的應用方式,分布式和集群的能. 官網:http://www.quartz-scheduler.org

  2. Quartz的核心元素

    1. Scheduler:任務調度器,是實際執行任務調度的控制器
    2. Trigger:觸發器,用于定義任務調度的時間規則,有SimpleTrigger,CronTrigger等,其中SimpleTrigger定義時間規則簡單的任務,CronTrigger通過設置Cron表達式定義復雜時間規則的任務
    3. JobDetail:用來描述Job實現類及其它相關的靜態信息,如Job/Group名字、關聯監聽器等信息
    4. Job是一個接口,只有一個方法void execute(JobExecutionContext context),自定義任務只需要實現該方法即可

二 簡單使用

  1. 新建一個Maven項目,新建完成后,修改pom.xml文件,添加Quartz依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.1.6.RELEASE</version></dependency>
  1. 新建Job1,Job2兩個類,兩個類都實現Job接口,并實現executef方法
package quartzDemo.quartz;import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;public class Job1 implements Job {public void execute(JobExecutionContext context) throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();System.out.println(String.format("%s: JobGroup:%s JobName:%s", DateTimeHelper.Now(), jobKey.getGroup(), jobKey.getName()));JobDataMap dataMap = context.getMergedJobDataMap();
//
//      String jobData = dataMap.getString("JobDetailData");
//      String triggerData = dataMap.getString("TriggerData");
//
//      System.out.println(String.format("JobDataMap: jobData:%s triggerData:%s", jobData, triggerData));}}
package quartzDemo.quartz;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;public class Job2 implements Job{public void execute(JobExecutionContext context) throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();System.out.println(String.format("%s: JobGroup:%s JobName:%s", DateTimeHelper.Now(), jobKey.getGroup(), jobKey.getName()));}}
  1. 在App.java中新建兩個方法,分別初始化job1和job2,并且在main方法中將兩個job添加到Scheduler,如下
package quartzDemo.quartz;import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;/*** @author QIUYANJUN*/
public class App {public static void main(String[] args) {String job2cronExpression = "0/5 * * * * ? ";JobModel job1 = InitSimpleJob();JobModel job2 = InitCronJob(job2cronExpression);SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler;try {scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(job1.getJobDetail(), job1.getTrigger());scheduler.scheduleJob(job2.getJobDetail(), job2.getTrigger());System.out.println(DateTimeHelper.Now());} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** SimpleJob初始化* @return*/private static JobModel InitSimpleJob() {JobKey jobKey = JobKey.jobKey("job1", "group1");JobDetail jobDetail = JobBuilder.newJob(Job1.class).withIdentity(jobKey).withDescription("first quartz job").usingJobData("JobDetailData", "Hello JobDetail").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withDescription("first quartz trigger").usingJobData("TriggerData", "Hello Trigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(3)).build();return new JobModel(jobDetail, trigger);}/*** CronJob初始化* * @param cronExpression Cron表達式* @return*/private static JobModel InitCronJob(String cronExpression) {JobKey jobKey = JobKey.jobKey("job2", "group1");JobDetail jobDetail = JobBuilder.newJob(Job2.class).withIdentity(jobKey).withDescription("second quartz job").usingJobData("JobDetailData", "Hello JobDetail").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "group1").withDescription("second quartz trigger").usingJobData("TriggerData", "Hello Trigger").startNow()// .endAt(DateTimeHelper.AddSecond(50)).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();return new JobModel(jobDetail, trigger);}
}
  1. 其他需要用到的類
package quartzDemo.quartz;import org.quartz.JobDetail;
import org.quartz.Trigger;public class JobModel {private JobDetail jobDetail;private Trigger trigger;public JobDetail getJobDetail() {return jobDetail;}public void setJobDetail(JobDetail jobDetail) {this.jobDetail = jobDetail;}public Trigger getTrigger() {return trigger;}public void setTrigger(Trigger trigger) {this.trigger = trigger;}public JobModel() {}public JobModel(JobDetail jobDetail, Trigger trigger) {super();this.jobDetail = jobDetail;this.trigger = trigger;}
}
package quartzDemo.quartz;import java.text.SimpleDateFormat;
import java.util.Date;public class DateTimeHelper {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");public static String Now() {Date date = new Date();return simpleDateFormat.format(date);}public static Date AddSecond(int second) {Date date = new Date();date.setTime(date.getTime() + second * 1000);return date;}public static String Format(Date date, String pattern) {if (!pattern.isEmpty()) {pattern = "yyyy-MM-dd HH:MM:ss";}simpleDateFormat = new SimpleDateFormat(pattern);return simpleDateFormat.format(date);}
}
  1. 最后,運行App.java中的mian方法,查看輸出,如下

轉載于:https://www.cnblogs.com/ShuiMu/articles/9578631.html

總結

以上是生活随笔為你收集整理的Java基于Quartz的定时任务调度服务(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。