<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      小雞炸

      導(dǎo)航

      SpringBoot_SpringTask_Quartz

      一、SpringTask和Quartz

      1、兩者都是用來(lái)任務(wù)調(diào)度的框架、比如需要每天定時(shí)清理垃圾數(shù)據(jù)
      2、SpringTask
      1、默認(rèn)單線程同步執(zhí)行
      2、單個(gè)任務(wù)時(shí),當(dāng)前次的調(diào)度完成后,再執(zhí)行下一次任務(wù)調(diào)度
      3、多個(gè)任務(wù)時(shí),一個(gè)任務(wù)執(zhí)行完成后才會(huì)執(zhí)行下一個(gè)任務(wù)。若需要任務(wù)能夠并發(fā)執(zhí)行,需手動(dòng)設(shè)置線程池
      4、觸發(fā)方式:與Quartz的CronTrigger的表達(dá)式類似
      5、可以使用注解標(biāo)注定時(shí)任務(wù)
      
      3、Quartz
      1、默認(rèn)多線程異步執(zhí)行
      2、單個(gè)任務(wù)時(shí),在上一個(gè)調(diào)度未完成時(shí),下一個(gè)調(diào)度時(shí)間到時(shí),會(huì)另起一個(gè)線程開(kāi)始新的調(diào)度。業(yè)務(wù)繁忙時(shí),一個(gè)任務(wù)會(huì)有多個(gè)調(diào)度,可能導(dǎo)致數(shù)據(jù)處理異常。
      3、多個(gè)任務(wù)時(shí),任務(wù)之間沒(méi)有直接影響,多任務(wù)執(zhí)行的快慢取決于CPU的性能
      4、觸發(fā)方式一:SimpleTrigger:value=2000 每隔兩秒觸發(fā)
      5、觸發(fā)方式二:CronTrigger:value=”0 0 12 * * ?” 每天中午12點(diǎn)觸發(fā)
      6、需要在配置文件中實(shí)現(xiàn)配置Job
      7、能被集群實(shí)例化,支持分布式部署
      8、使用JobStoreCMT(JDBCJobStore的子類),Quartz 能參與JTA事務(wù);Quartz 能管理JTA事務(wù)(開(kāi)始和提交)在執(zhí)行任務(wù)之間,這樣,任務(wù)做的事就可以發(fā)生在JTA事務(wù)里。
      
      4、兩者的區(qū)別
      1、實(shí)現(xiàn),Task注解實(shí)現(xiàn)方式,比較簡(jiǎn)單。Quartz需要手動(dòng)配置Jobs。
      2、任務(wù)執(zhí)行,Task默認(rèn)單線程串行執(zhí)行任務(wù),多任務(wù)時(shí)若某個(gè)任務(wù)執(zhí)行時(shí)間過(guò)長(zhǎng),后續(xù)任務(wù)會(huì)無(wú)法及時(shí)執(zhí)行。Quartz采用多線程,無(wú)這個(gè)問(wèn)題。
      3、調(diào)度,Task采用順序執(zhí)行,若當(dāng)前調(diào)度占用時(shí)間過(guò)長(zhǎng),下一個(gè)調(diào)度無(wú)法及時(shí)執(zhí)行;Quartz采用異步,下一個(gè)調(diào)度時(shí)間到達(dá)時(shí),會(huì)另一個(gè)線程執(zhí)行調(diào)度,不會(huì)發(fā)生阻塞問(wèn)題,但調(diào)度過(guò)多時(shí)可能導(dǎo)致數(shù)據(jù)處理異常
      4、部署,Quartz可以采用集群方式,分布式部署到多臺(tái)機(jī)器,分配執(zhí)行定時(shí)任務(wù)
      

      二、SpringTask的使用

      1、導(dǎo)入jar包:spring-context.jar包就帶這個(gè)功能、所以選擇 web就可以使用了
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
      
      2、編寫一個(gè)類,被Spring管理即可執(zhí)行
      import java.util.Date;
      import org.springframework.context.annotation.Bean;
      import org.springframework.scheduling.annotation.Scheduled;
      import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
      import org.springframework.stereotype.Component;
      
      @Component
      public class TaskTools {
      	static int count=0;
      	
      	@Scheduled( fixedRate = 5000 )
          public void test001() {
              System.out.println("無(wú)論上一次執(zhí)行需要多少秒,我都會(huì)在5秒后執(zhí)行:"+new Date().getSeconds());
              try {
      			Thread.sleep(3000);
      		} catch (InterruptedException e) {
      			e.printStackTrace();
      		}
          }
      	
      	@Scheduled( fixedDelay = 5000 )
          public void test002() {
              System.out.println("上一次執(zhí)行完畢后,再過(guò)5秒,我再執(zhí)行:"+new Date().getSeconds());
              try {
      			Thread.sleep(3000);
      		} catch (InterruptedException e) {
      			e.printStackTrace();
      		}
          }
      	
      	//@Scheduled(cron = "0 0/1 * * * ? ")
          public void test003(){
              System.out.println("我會(huì)每隔1分鐘執(zhí)行一次");
      	}
      	
      	//initialDelay 初始化延遲時(shí)間,也就是標(biāo)識(shí)第一次延遲執(zhí)行的時(shí)間,只能配合 fixedDelay 或 fixedRate 使用
      	//@Scheduled(initialDelay = 5000, fixedRate = 5000)
          public void test004() {
              System.out.println("第一次執(zhí)行需要5秒后");
          }
      }
      
      3、@Scheduled常用屬性介紹
      屬性名 屬性作用
      fixedRate 上一次執(zhí)行無(wú)論需要多少秒結(jié)束,我都會(huì)在5秒后執(zhí)行
      fixedDelay 上一次執(zhí)行完畢后,我再執(zhí)行
      cron Cron表達(dá)式:在線生成https://cron.qqe2.com/
      initialDelay 初始化延遲時(shí)間,也就是標(biāo)識(shí)第一次延遲執(zhí)行的時(shí)間,只能配合 fixedDelay 或 fixedRate 使用
      4、啟動(dòng)類添加注解
      @SpringBootApplication
      @EnableScheduling
      public class Springboot004Application {
      
      	public static void main(String[] args) {
      		SpringApplication.run(Springboot004Application.class, args);
      	}
      }
      
      5、CronExpression表達(dá)式詳解

      https://www.jianshu.com/p/1defb0f22ed1

      在線制作Cron表達(dá)式:https://www.bejson.com/othertools/cron/

      格式為:{秒數(shù)} {分鐘} {小時(shí)} {日期} {月份} {星期} {年份(可為空)}

      cron表達(dá)式各占位符解釋:

      以下為{秒數(shù)}的案例 ==> 允許值范圍: 0~59 ,不允許為空值,若值不合法,調(diào)度器將拋出SchedulerException異常

      "*" 代表每隔1秒鐘觸發(fā);

      "," 代表在指定的秒數(shù)觸發(fā),比如"0,15,45"代表0秒、15秒和45秒時(shí)觸發(fā)任務(wù)

      "-" 代表在指定的范圍內(nèi)觸發(fā),比如"25-45"代表從25秒開(kāi)始觸發(fā)到45秒結(jié)束觸發(fā),每隔1秒觸發(fā)1次

      "/" 代表觸發(fā)步進(jìn)(step),"/"前面的值代表初始值(""等同"0"),后面的值代表偏移量,比如"0/20"或者"/20"代表從0秒鐘開(kāi)始,每隔20秒鐘觸發(fā)1次,即0秒觸發(fā)1次,20秒觸發(fā)1次,40秒觸發(fā)1次;"5/20"代表5秒觸發(fā)1次,25秒觸發(fā)1次,45秒觸發(fā)1次;"10-45/20"代表在[10,45]內(nèi)步進(jìn)20秒命中的時(shí)間點(diǎn)觸發(fā),即10秒觸發(fā)1次,30秒觸發(fā)1次

      三、Quartz的使用

      1、導(dǎo)入jar包

      		<dependency>
      			<groupId>org.springframework.boot</groupId>
      			<artifactId>spring-boot-starter-quartz</artifactId>
      		</dependency>
      

      2、創(chuàng)建一個(gè)【被調(diào)度的類】

      import org.quartz.Job;
      import org.quartz.JobDataMap;
      import org.quartz.JobExecutionContext;
      import org.quartz.JobExecutionException;
      
      public class MyJob implements Job {
          private void before() {
              System.out.println("任務(wù)開(kāi)始執(zhí)行");
          }
          
          @Override
          public void execute(JobExecutionContext context) throws JobExecutionException {
              before();
              System.out.println("開(kāi)始:" + System.currentTimeMillis());
              JobDataMap jdMap = context.getJobDetail().getJobDataMap();  //獲得傳遞過(guò)來(lái)的參數(shù)
              System.out.println(jdMap.get("key"));
              System.out.println("結(jié)束:" + System.currentTimeMillis());
              after();
          }
      
          private void after() {
              System.out.println("任務(wù)開(kāi)始執(zhí)行");
          }
      }
      

      3、創(chuàng)建一個(gè)調(diào)用【任務(wù)調(diào)度服務(wù)】

      import java.util.Date;
      
      import javax.servlet.http.HttpServletRequest;
      import org.quartz.CronScheduleBuilder;
      import org.quartz.CronTrigger;
      import org.quartz.JobBuilder;
      import org.quartz.JobDetail;
      import org.quartz.Scheduler;
      import org.quartz.SchedulerException;
      import org.quartz.SimpleScheduleBuilder;
      import org.quartz.Trigger;
      import org.quartz.TriggerBuilder;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RequestMapping("/student")
      public class MyController {
      	@Autowired
      	Scheduler scheduler;
      
      	@RequestMapping(value = "/index001")
      	public void testTask() throws SchedulerException {
      		JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job2", "group2").build();
      		jobDetail.getJobDataMap().put("key", "張三"); // 給自定義任務(wù)傳值
      		CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/1 * * * ?");
      		CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job2", "group2")
      				.withSchedule(cronScheduleBuilder).build();
      
      		scheduler.scheduleJob(jobDetail, cronTrigger);
      	}
      
      	Trigger trigger = TriggerBuilder.newTrigger().withIdentity("Trigger_HelloQuartz", "group1") // 定義name/group
      			// .startNow()//一旦加入scheduler,立即執(zhí)行11
      			.startAt(new Date(System.currentTimeMillis() + 5000))// 5秒后執(zhí)行
      			.withSchedule(SimpleScheduleBuilder.simpleSchedule() // 使用SimpleTrigger
      					.withIntervalInSeconds(2) // 每隔2秒執(zhí)行一次
      					.withRepeatCount(1))// 重復(fù)1次,共計(jì)2次
      			// .repeatForever()) //一直執(zhí)行,奔騰到老不停歇
      			.build();
      }
      

      posted on 2022-01-19 10:46  小雞炸  閱讀(143)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 久久成人影院精品777| 欧美色欧美亚洲高清在线视频| 国产精品人伦一区二区三| 久青草国产在视频在线观看| 国产真人无遮挡免费视频| 蜜桃av无码免费看永久| 美腿丝袜亚洲综合第一页| 国产精品自在线拍国产| 国产在线午夜不卡精品影院| 国产一区二区三中文字幕| 国产一区二区波多野结衣| 在线精品国产中文字幕| 四虎影视www在线播放| 97精品人妻系列无码人妻| 大色综合色综合网站| 国产午夜福利短视频| 国产三级国产精品久久成人| 包头市| 激情综合网激情五月俺也想| 男女性高爱潮免费网站| 人人人澡人人肉久久精品| 九九热免费在线观看视频| 亚洲色一区二区三区四区| 亚洲精品中文字幕二区| 熟女人妇 成熟妇女系列视频| 浴室人妻的情欲hd三级国产| 久久精品女人的天堂av| 日韩内射美女人妻一区二区三区| 色一伊人区二区亚洲最大| 麻豆一区二区三区精品视频| 亚洲国产亚洲综合在线尤物| 在线播放国产精品一品道| 日本免费一区二区三区| 婷婷99视频精品全部在线观看 | 下面一进一出好爽视频| 成人免费亚洲av在线| 无码中文字幕人妻在线一区二区三区 | 国产精品无码素人福利不卡| 色欲综合久久中文字幕网| 国产成人乱色伦区| 亚洲国产成人久久一区久久|