タスクタイミング:静的定期的なタスクを作成し、動的にスケジュールされたタスク

3つのスケジュールされたタスクを達成するためにあります
。1つのJDK自身のタイマータスク
2クォーツプラグスケジュールされたタスクが追加のパケットを導入する必要があり、達成するために
他のパッケージを導入することなく3 SpringTaskはタイミングスケジュールは、jdkのパッケージに再びです、自己春にパッケージに
SpringTaskタイミングタスクを達成するための3つの方法があります

1つのコメント実現(スタティックタイミングタスク)

3によって注釈
@Scheduled:タイミングの方法および構成時間表現の特定のタスクに配置
@EnableScheduling:ブートクラスに配置されているクラスSpringBootApplication
@Component:特定のタイミングタスククラスに配置され、クラスレジスタ成分として

インプリメンテーション:
クラスSpringBootApplicationの開始に1.1注釈付き@EnableScheduling
1.2は、スケジュールされたタスククラスを作成するには

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
//将该定时任务类注册为一个组件
@Component
public class MyTask {
//cron = "0/5 * * * * ? "是时间表达式
//@Scheduled5秒执行一次taskTest方法
@Scheduled(cron = "0/5 * * * * ? ")
public void taskTest(){
    System.out.println(new Date());
}
}

結果
ここに画像を挿入説明

2 XMLを達成(静的定期的なタスクを、XMLタグでノートを交換することです)

動的にタイマータスク3を追加

スレッドプール使用して、動的タスクスケジューリング機構を追加し
、直接ダイナミックなタイミングタスクを設定しない場合は、コメントに以下の三つの注意事項があれば、使用されていない動的に注釈を追加3.1を
@Scheduled
@EnableScheduling
@Component

3.2

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

//将该类注册为组件
@Component
public class MyTaskUtil {
//注入线程池的调度任务类
@Autowired
ThreadPoolTaskScheduler threadPoolTaskScheduler;
//创建一个时间表达式方法
public void addTask(String cron){
    //用触发器new一个时间表达式,创建的构造方法的入参就是时间表达式
    Trigger trigger=new CronTrigger(cron);
    //将触发任务放在线程池的任务调度里(第二个参数),第一个参数是定时任务要执行的目标类
    threadPoolTaskScheduler.schedule(new TaskRunnable(),trigger );
}
}

3.3
クラス(クラスが実際にタスクを実行する時間である)マルチスレッドのRunnableインターフェースを作成し、実行メソッドをオーバーライド

import java.util.Date;

public class TaskRunnable implements Runnable{
@Override
public void run(){
    System.out.println(new Date());
}
}

3.4

コントローラ里

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyTask {
//注入工具类,就是定时任务的类
@Autowired
MyTaskUtil taskUtil;
@RequestMapping("/addTask")
//传入参数,与下一行的时间表达式做拼接,参数传入几就是几秒执行一次目标任务
//threadPoolTaskScheduler实例调用schedule方法就是创建执行任务
public void addTask(String cron){
    String s="0/"+cron+" * * * * ? ";
    //调用执行定时任务的方法
    taskUtil.addTask(s);
}
}

要求アドレス:http://127.0.0.1:8080/addTask?cron=5

ここに画像を挿入説明
スケジュールされたタスクは、要求されたタスクの場合には、同時に作成することができますが停止されていない
http://127.0.0.1:8080/addTask?cron=3はその後、タイミングタスクを作成された
動的なタイマータスク作成のステップ
1は、スレッドプールを作成します。タスクスケジューリング豆

@Autowired
ThreadPoolTaskScheduler threadPoolTaskScheduler;

2マルチスレッドインタフェース(Runnableを)を実装、および実行方法を対象として行われるオーバーライドします

public class TaskRunnable implements Runnable{
@Override
public void run(){
    System.out.println(new Date());
}
}

3時限トリガートリガーを作成します。

Trigger trigger=new CronTrigger(cron);

4タスクスケジューラのタスク:トリガ、タイミング目標

threadPoolTaskScheduler.schedule(new TaskRunnable(),trigger );

静的タイマー、良いか悪いかではない別の動的なシーンを、使用してタイマー

cronの表現:、その構造がされ
、左から右に(スペースで区切って):日付年月日時分月の第2週

表現の一般的な例

每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

http://qqe2.com/cron/indexオンライン表現

おすすめ

転載: blog.csdn.net/qq_41767337/article/details/89400854