激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩视频一区二区在线观看 | 成人午夜高清 | 成人在线视频免费播放 | 亚洲日韩精品欧美一区二区 | 特级西西444www大精品视频免费看 | av免费在线观看国产 | 三人弄娇妻高潮3p视频 | 一级做a爱片久久 | 白白在线免费视频 | 亚洲一区二区三区在线看 | 国产精品久久久久久久久久久久久久久久 | 久久久入口 | 国产精品久久久久久久久久久久久久久 | 黄色影院网站 | 亚洲成人播放 | 久久里面有精品 | 成人福利电影在线观看 | 亚洲第五色综合网 | 羞羞视频免费观看网站 | 欧美黑人xx| 91免费版在线观看 | 国产精品久久久久av | 久久久久久久久久久久久久久伊免 | 久操福利视频 | 午夜视频在线免费播放 | 日本高清黄色片 | 亚洲精品成人18久久久久 | 综合精品 | 色女孩网 | 99久久精品日本一区二区免费 | 久久久日韩av免费观看下载 | 91精品国产92久久久久 | 日本一区二区高清不卡 | 成人国产高清 | 久久老司机精品视频 | 国产成人自拍视频在线观看 | 调教小男生抽打尿孔嗯啊视频 | 成年免费网站 | 大学生a级毛片免费视频 | 亚洲午夜电影 | 欧美特一级片 |