一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 動態增加定時任務示例

java 動態增加定時任務示例

2020-08-23 15:09張錫斌 Java教程

本篇文章主要介紹了java 動態增加定時任務示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

整理文檔,java 動態增加定時任務示例,直接上代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
import org.apache.tools.ant.util.DateUtils;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
 
import java.util.Calendar;
import java.util.Date;
 
 
/**
 * @Description: 定時任務管理類
 * Created by zhangxb on 2017/2/10.
 */
public class QuartzManager {
  private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
  private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
  private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
 
  /**
   * @Description: 添加一個定時任務,使用默認的任務組名,觸發器名,觸發器組名
   *
   * @param jobName
   *      任務名
   * @param cls
   *      任務
   * @param time
   *      時間設置,參考quartz說明文檔
   *
   * @Title: QuartzManager.java
   */
  @SuppressWarnings("unchecked")
  public static void addJob(String jobName, Class cls, String time,Object params) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任務名,任務組,任務執行類
      jobDetail.getJobDataMap().put("params", params);
      // 觸發器
      CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 觸發器名,觸發器組
      trigger.setCronExpression(time);// 觸發器時間設定
      sched.scheduleJob(jobDetail, trigger);
      // 啟動
      if (!sched.isShutdown()) {
        sched.start();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 添加一個定時任務
   *
   * @param jobName
   *      任務名
   * @param jobGroupName
   *      任務組名
   * @param triggerName
   *      觸發器名
   * @param triggerGroupName
   *      觸發器組名
   * @param jobClass
   *      任務
   * @param time
   *      時間設置,參考quartz說明文檔
   *
   */
  @SuppressWarnings("unchecked")
  public static void addJob(String jobName, String jobGroupName,
               String triggerName, String triggerGroupName, Class jobClass,
               String time,Object params) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任務名,任務組,任務執行類
      jobDetail.getJobDataMap().put("params",params);
      // 觸發器
      CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 觸發器名,觸發器組
      trigger.setCronExpression(time);// 觸發器時間設定
      sched.scheduleJob(jobDetail, trigger);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 修改一個任務的觸發時間(使用默認的任務組名,觸發器名,觸發器組名)
   *
   * @param jobName
   * @param time
   *
   */
  @SuppressWarnings("unchecked")
  public static void modifyJobTime(String jobName, String time) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
      if (trigger == null) {
        return;
      }
      String oldTime = trigger.getCronExpression();
      if (!oldTime.equalsIgnoreCase(time)) {
        JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);
        Class objJobClass = jobDetail.getJobClass();
        removeJob(jobName);
        addJob(jobName, objJobClass, time ,jobDetail.getJobDataMap());
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 修改一個任務的觸發時間
   *
   */
  public static void modifyJobTime(String triggerName,
                   String triggerGroupName, String time) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName);
      if (trigger == null) {
        return;
      }
      String oldTime = trigger.getCronExpression();
      if (!oldTime.equalsIgnoreCase(time)) {
        CronTrigger ct = (CronTrigger) trigger;
        // 修改時間
        ct.setCronExpression(time);
        // 重啟觸發器
        sched.resumeTrigger(triggerName, triggerGroupName);
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 移除一個任務(使用默認的任務組名,觸發器名,觸發器組名)
   *
   * @param jobName
   *
   */
  public static void removeJob(String jobName) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止觸發器
      sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除觸發器
      sched.deleteJob(jobName, JOB_GROUP_NAME);// 刪除任務
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 移除一個任務
   *
   */
  public static void removeJob(String jobName, String jobGroupName,
                 String triggerName, String triggerGroupName) {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      sched.pauseTrigger(triggerName, triggerGroupName);// 停止觸發器
      sched.unscheduleJob(triggerName, triggerGroupName);// 移除觸發器
      sched.deleteJob(jobName, jobGroupName);// 刪除任務
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description:啟動所有定時任務
   */
  public static void startJobs() {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      sched.start();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description:關閉所有定時任務
   *
   */
  public static void shutdownJobs() {
    try {
      Scheduler sched = gSchedulerFactory.getScheduler();
      if (!sched.isShutdown()) {
        sched.shutdown();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  public static String formatTime(Date date){
    //0/1 * * * * ?
    String time = DateUtils.format( date, "s m h d * ?");
    System.out.println(time);
    return time;
  }
}

測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
/**
 * @Description: 任務執行類
 * Created by zhangxb on 2017/2/10.
 */
public class QuartzJob implements Job {
  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    Object params =  context.getJobDetail().getJobDataMap().get("params");
    System.out.println(params);
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "★★★★★★★★★★★");
    System.out.println("【移除定時】開始...");
    QuartzManager.removeJob((String)params);
    System.out.println("【移除定時】成功");
  }
  public static void main(String[] args) {
    try {
      String job_name = "動態任務調度";
      System.out.println("【系統啟動】開始(每1秒輸出一次)...");
      Calendar cal = Calendar.getInstance();
      cal.add( Calendar.SECOND,10);
      QuartzManager.addJob(job_name, QuartzJob.class, QuartzManager.formatTime(cal.getTime()),job_name);
      Thread.sleep(11);
      cal.setTime( new Date());
      cal.add( Calendar.SECOND,10);
      QuartzManager.addJob(job_name+1, QuartzJob.class, QuartzManager.formatTime(cal.getTime()),job_name+1);
      Thread.sleep(11);
//      System.out.println("【修改時間】開始(每2秒輸出一次)...");
//      QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?");
//      Thread.sleep(6000);
//      System.out.println("【移除定時】開始...");
//      QuartzManager.removeJob(job_name);
//      System.out.println("【移除定時】成功");
//
//      System.out.println("【再次添加定時任務】開始(每10秒輸出一次)...");
//      QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?");
//      Thread.sleep(60000);
//      System.out.println("【移除定時】開始...");
//      QuartzManager.removeJob(job_name);
//      System.out.println("【移除定時】成功");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

不過最后發現,還是沒法做動態延遲。后面用延時mq實現的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/foreverzxb/p/6491190.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品一区久久精品 | 99re在线精品视频免费 | 99在线免费观看视频 | 国产国语videosex另类 | 亚洲网红精品大秀在线观看 | 日本中文字幕高清 | 免费在线观看日韩 | 欧美日韩一区二区三区在线视频 | 香蕉免费看一区二区三区 | 天天射久久 | 亚洲视频99| 青青草久 | 无限资源在线观看播放 | 女人张开腿让男人做爽爽 | 日韩毛片在线 | 四虎海外影院 | h版欧美大片免费观看 | 精品视频一区二区观看 | 成人看的羞羞视频免费观看 | 成人性生交大片免费看软件 | 欧美亚洲国产综合在线 | 亚洲经典激情春色另类 | 国产精品香蕉夜间视频免费播放 | 日本三级在线观看免费 | 四虎精品成人免费视频 | 国产免费不卡视频 | 九九九久久久 | 久久国产加勒比精品无码 | 波多野结衣xxxxx在线播放 | 四虎影视免费 | 欧美黑大吊 | 91麻豆制片厂 | 亚洲精品免费在线 | 国产高清在线播放刘婷91 | 99re7在线精品免费视频 | 亚洲AV无码专区国产乱码网站 | 幸福草电视剧演员表介绍 | 亚洲色域网| 亚洲va久久久久综合 | 欧美日韩国产亚洲一区二区 | 女教师三级做受 |