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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 动态添加定时器_quartz实现任务动态增加和删除

發(fā)布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 动态添加定时器_quartz实现任务动态增加和删除 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

場景

這幾天做項目的時候遇到了個狀態(tài)自動切換的場景。該場景具體情況如下:

用戶可以創(chuàng)建多個活動

活動有開始時間和結(jié)束時間

活動有個狀態(tài):未上線、未開始(上線但未到開始時間)、進行中(上線且處于開始時間和結(jié)束時間之間)、已結(jié)束(上線且處于活動結(jié)束時間之后)

在上訴條件下自動切換活動狀態(tài),切換時間點為:活動開始時間(未開始->進行中);活動結(jié)束時間(進行中->已結(jié)束)

分析

根據(jù)場景中出現(xiàn)的情況,一個定時器就可以解決問題,只需要添加定時任務在指定時間進行活動狀態(tài)切換即可。可以在活動上線的時候為每個活動創(chuàng)建一個定時任務,由于活動可以在進行中下線,所以在執(zhí)行上線操作的時候需要判斷上線后的活動狀態(tài),然后根據(jù)活動當前狀態(tài)創(chuàng)建當時任務;在活動下線的時候關(guān)閉該活動的任務。

java解決定時任務的方法較為常用的是有兩種方法:java.util.Timer 和org.quartz;這兩種方式各有起優(yōu)缺點,Timer實現(xiàn)起來非常簡單,只需要實現(xiàn)一個TimerTask即可進行定時任務調(diào)度,但是Timer定時任務存在幾個缺點導致在實際開發(fā)中很少用其作為定時器,以下是timer和quartz相比的不足:

java定時器沒有持久化機制

java定時器的日程管理不夠靈活

java定時器沒有使用線程池

java定時器么有確切的管理方案

生成環(huán)境中更多是使用quartz來做定時任務的開發(fā),本文主要講解quartz如何添加定時任務和刪除定時任務。

quartz介紹

Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結(jié)合也可以單獨使用。Quartz可以用來創(chuàng)建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的程序。Jobs可以做成標準的Java組件或 EJBs。

job quartz核心任務接口,實現(xiàn)execute方法即可

jobDetail quartz為調(diào)度器可以識別的任務詳情對象,該對象包含任務的唯一key值,以及任務人發(fā)執(zhí)行所需參數(shù)等

trigger 任務執(zhí)行觸發(fā)器,指定任務執(zhí)行時間等

scheduler quartz核心調(diào)度器,將jobDetail和trigger結(jié)合起來調(diào)度定時任務

實現(xiàn)案例(并非解決上訴場景代碼)

實現(xiàn)Job接口

package java;

import org.quartz.Job;

import org.quartz.JobDataMap;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

/**

* Created by Lethe on 2017/3/29.

* 該任務將在被觸發(fā)的時候?qū)⑤敵?#xff1a; hello ${name}

*/

public class QuartzJob implements Job {

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();

System.out.println("hello "+ map.getString("name"));

}

}

任務調(diào)度

package org.hanmeis;

import org.quartz.JobDataMap;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.impl.JobDetailImpl;

import org.quartz.impl.StdSchedulerFactory;

import org.quartz.impl.triggers.CronTriggerImpl;

import java.text.ParseException;

/**

* Created by Lethe on 2017/3/29.

*/

public class SchedulerTest {

public static void main(String[] args) throws SchedulerException, ParseException {

// 構(gòu)造調(diào)度器,使用標準調(diào)度器工廠獲取默認的調(diào)度器

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

JobDataMap dataMap = new JobDataMap();

dataMap.put("name", "world");

// 構(gòu)造JobDetail,使用默認的JobDetailImpl類

JobDetailImpl detail = new JobDetailImpl();

detail.setJobClass(QuartzJob.class);

detail.setJobDataMap(dataMap);

detail.setName("testJob");

// 構(gòu)造Trigger,使用CronTrigger

CronTriggerImpl cronTrigger = new CronTriggerImpl();

cronTrigger.setCronExpression("00 * 15 29 3 ? 2017");// 如果僅需在指定時間執(zhí)行一次任務,則表達式一般寫法為:00 50 15 29 3 ? 2017(表示在2017-03-29 15:50:00執(zhí)行任務)

cronTrigger.setName("testTrigger");

// 調(diào)度任務

scheduler.scheduleJob(detail, cronTrigger);

}

}

任務動態(tài)增加和刪除

scheduler本身提供任務的裝載、卸載及刷新等接口

Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException;

Date scheduleJob(Trigger trigger) throws SchedulerException;

void scheduleJobs(Map> triggersAndJobs, boolean replace) throws SchedulerException;

void scheduleJob(JobDetail jobDetail, Set extends Trigger> triggersForJob, boolean replace) throws SchedulerException;

boolean unscheduleJob(TriggerKey triggerKey) throws SchedulerException;

boolean unscheduleJobs(List triggerKeys) throws SchedulerException;

Date rescheduleJob(TriggerKey triggerKey, Trigger newTrigger) throws SchedulerException;

引用

quartz[互動百科]:http://www.baike.com/wiki/Quartz

Timer和spring的Quartz兩種定時器的區(qū)別[CSDN]:http://blog.csdn.net/zlxdream815/article/details/8177574

總結(jié)

以上是生活随笔為你收集整理的java 动态添加定时器_quartz实现任务动态增加和删除的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。