国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - SpringBoot2 task scheduler 定時任務調度器四種方式

SpringBoot2 task scheduler 定時任務調度器四種方式

2021-07-22 16:02cnJun Java教程

這篇文章主要介紹了SpringBoot2 task scheduler 定時任務調度器四種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

使用@enablescheduling方式

?
1
2
3
4
5
6
7
8
9
10
@component
@configurable
@enablescheduling
public class task1 {
  private static log logger = logfactory.getlog(task1.class);
  @scheduled(cron = "0/2 * * * * * ")
  public void execute() {
    logger.info("task1>>" + new date());
  }
}

xml配置方式

application 啟動加入讀取 xml 文件

?
1
2
3
4
5
6
7
8
@springbootapplication
@importresource(value = { "classpath:applicationcontext*.xml" })
public class springboot2taskapplication {
 
  public static void main(string[] args) {
    springapplication.run(springboot2taskapplication.class, args);
  }
}
?
1
2
3
4
5
6
<context:component-scan base-package="com.chenyingjun.task.schedual"></context:component-scan>
<task:scheduler id="appscheduler" pool-size="2" />
<!-- 調整定時任務 -->
<task:scheduled-tasks> 
  <task:scheduled ref="task2" method="method2" cron="0/10 * * * * ?"/>
</task:scheduled-tasks>
?
1
2
3
4
5
6
7
@service
public class task2 {
  private static log logger = logfactory.getlog(task2.class);
  public void method2() {
    logger.info("task2----method2>>>>" + new date());
  }
}

bean創建工廠方式

使用到的 jar 包

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<dependency>
  <groupid>org.springframework</groupid>
  <artifactid>spring-context-support</artifactid>
</dependency>
<dependency>
  <groupid>org.springframework</groupid>
  <artifactid>spring-tx</artifactid>
</dependency>
<dependency>
  <groupid>org.quartz-scheduler</groupid>
  <artifactid>quartz</artifactid>
  <version>2.3.0</version>
</dependency>

新建 schedledconfiguration.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
@configuration
public class schedledconfiguration {
 
  /**
   * attention:
   * details:配置定時任務
   */
  @bean(name = "jobdetail")
  public methodinvokingjobdetailfactorybean detailfactorybean(task3 task) {// testtask為需要執行的任務
    methodinvokingjobdetailfactorybean jobdetail = new methodinvokingjobdetailfactorybean();
    /*
     * 是否并發執行
     * 例如每5s執行一次任務,但是當前任務還沒有執行完,就已經過了5s了,
     * 如果此處為true,則下一個任務會執行,如果此處為false,則下一個任務會等待上一個任務執行完后,再開始執行
     */
    jobdetail.setconcurrent(false);
 
    // 設置任務的名字
    jobdetail.setname("jobdetailname");
 
    // 設置任務的分組,這些屬性都可以存儲在數據庫中,在多任務的時候使用
    jobdetail.setgroup("jobdetailgroup");
 
    /*
     * 為需要執行的實體類對應的對象
     */
    jobdetail.settargetobject(task);
 
    /*
     * 通過這幾個配置,告訴jobdetailfactorybean我們需要執行定時執行scheduletask類中的task方法
     */
    jobdetail.settargetmethod("task");
    return jobdetail;
  }
 
  /**
   * details:配置定時任務的觸發器,也就是什么時候觸發執行定時任務
   */
  @bean(name = "jobtrigger")
  public crontriggerfactorybean cronjobtrigger(jobdetail jobdetail) {
    crontriggerfactorybean tigger = new crontriggerfactorybean();
    tigger.setjobdetail(jobdetail);
    // 初始時的cron表達式,可以改成從數據庫中獲取
    tigger.setcronexpression("0/2 * * * * ?");
    // trigger的name
    tigger.setname("tiggername");
    return tigger;
 
  }
 
  /**
   * details:定義quartz調度工廠
   */
  @bean(name = "scheduler")
  public schedulerfactorybean schedulerfactory(trigger trigger) {
    schedulerfactorybean bean = new schedulerfactorybean();
    // 用于quartz集群,quartzscheduler 啟動時更新己存在的job
    bean.setoverwriteexistingjobs(true);
    // 延時啟動,應用啟動1秒后
    bean.setstartupdelay(1);
    // 注冊觸發器
    bean.settriggers(trigger);
    return bean;
  }
}

新建task任務

?
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
@service
public class task3 {
 
  @resource(name = "jobtrigger")
  private crontrigger crontrigger;
 
  @resource(name = "scheduler")
  private scheduler scheduler;
 
  private static log logger = logfactory.getlog(task3.class);
 
  public void task() {
    logger.info("task3---------" + new date());
  }
 
  /**
   * 設置cron并重啟定時器
   * @param cron cron值
   */
  public void setcron(string cron) {
    try {
      // 表達式調度構建器
      cronschedulebuilder schedulebuilder = cronschedulebuilder.cronschedule(cron);
      // 按新的cronexpression表達式重新構建trigger
      crontrigger trigger = (crontrigger) scheduler.gettrigger(crontrigger.getkey());
      trigger = trigger.gettriggerbuilder().withidentity(crontrigger.getkey())
          .withschedule(schedulebuilder).build();
      // 按新的trigger重新設置job執行
      scheduler.reschedulejob(crontrigger.getkey(), trigger);
    } catch (schedulerexception e) {
      logger.info("cron表達式錯誤");
    }
  }
}

其中 setcron 方法可以進行重新設定任務調度時間

threadpooltaskscheduler runnable方式

?
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
public class task4 implements runnable {
 
  private threadpooltaskscheduler threadpooltaskscheduler;
 
  private static log logger = logfactory.getlog(task4.class);
 
  @override
  public void run() {
    logger.info("task4================" + new date());
  }
 
  /**
   * 設置cron并啟動
   * @param cronexp cron值
   */
  public void restart(string cronexp) {
    if (null != this.threadpooltaskscheduler) {
      scheduledexecutorservice scheduledexecutorservice = this.threadpooltaskscheduler.getscheduledexecutor();
      if (!scheduledexecutorservice.isshutdown()) {
        scheduledexecutorservice.shutdownnow();
      }
 
      this.threadpooltaskscheduler.destroy();
    }
 
    if (null != cronexp && cronexp.trim().length() > 0) {
      this.threadpooltaskscheduler = new threadpooltaskscheduler();
      this.threadpooltaskscheduler.setthreadnameprefix("task4");
      this.threadpooltaskscheduler.initialize();
      this.threadpooltaskscheduler.schedule(this, new crontrigger(cronexp));
    }
  }
}

其中restart可以進行任務啟動和重新設置任務調度時間,調用方式如下所示

?
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
/**
   * 初始化task4
   * 這里的代碼不應該寫在rest層上, 應該寫在service層上
   */
  @postconstruct
  private void inittask4() {
    //初始化task4任務調度器cron,可以從數據庫中查詢到cron值
    settask4cron("0/3 * * * * ?");
  }
 
  /**
   * 改變task4的cron
   * @param cron cron值
   * @return 成功標志
   */
  @requestmapping(value = { "/settask4cron" }, method = requestmethod.get)
  @responsebody
  public string settask4cron(string cron) {
    if (null == task4) {
      task4 = new task4();
    }
 
    task4.restart(cron);
    return "success";
  }

inittask4 方法加了 @postconstruct '注解,可以在項目啟動時自動根據cron來啟動任務, settask4cron 方法可以重新調置任務時間

四個任務的效果如下:

SpringBoot2 task scheduler 定時任務調度器四種方式

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

原文鏈接:http://www.cnblogs.com/cnJun/p/10546745.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲激情在线视频 | 久久高清 | av成人在线观看 | 亚洲欧美一区二区视频 | 久久99精品国产.久久久久 | 91国内外精品自在线播放 | 亚洲二区视频 | 久久久久久久国产 | 日韩精品一区二区三区中文在线 | 久久免费一区 | 性欧美久久久 | 日韩国产欧美 | 国产黄色在线播放 | 精品无码久久久久国产 | 久久一区 | 国产激情网址 | 国产黄色片免费 | 国产一区二区三区视频 | 自拍亚洲 | 成人不卡视频 | 日韩欧美大片在线观看 | 成人综合av | 伊人一区二区三区 | 国精产品99永久一区一区 | 精品欧美 | 日韩高清一区二区 | 精品在线观看一区 | 国产乱码精品一区二区三区忘忧草 | 日韩码有限公司在线观看 | 欧美高清一区 | 国产在线视频网 | 日本在线视频观看 | 视频一区二区在线观看 | 欧美一级二级三级 | 成人精品一区二区三区 | 免费电影av | 中国成人免费视频 | 国产亚洲精品精品国产亚洲综合 | 日韩一区二区影视 | 欧洲精品久久久久69精品 | 天天射天天干 |