最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+Quartz實現(xiàn)動態(tài)定時任務

 更新時間:2022年09月02日 14:39:04   作者:你是我的小丫小太陽  
這篇文章主要為大家詳細介紹了springBoot+Quartz實現(xiàn)動態(tài)定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了springBoot+Quartz實現(xiàn)動態(tài)定時任務的具體代碼,供大家參考,具體內(nèi)容如下

目前常用的幾種任務調(diào)度

  • Timer,簡單無門檻,一般也沒人用。
  • spring @Scheduled注解,一般集成于項目中,小任務很方便。
  • 開源工具 Quartz,分布式集群開源工具,以下兩個分布式任務應該都是基于Quartz實現(xiàn)的,可以說是中小型公司必選,當然也視自身需求而定。
  • 分布式任務 XXL-JOB,是一個輕量級分布式任務調(diào)度框架,支持通過 Web 頁面對任務進行 CRUD 操作,支持動態(tài)修改任務狀態(tài)、暫停/恢復任務,以及終止運行中任務,支持在線配置調(diào)度任務入?yún)⒑驮诰€查看調(diào)度結(jié)果。
  • 分布式任務 Elastic-Job,是一個分布式調(diào)度解決方案,由兩個相互獨立的子項目 Elastic-Job-Lite 和 Elastic-Job-Cloud 組成。定位為輕量級無中心化解決方案,使用 jar 包的形式提供分布式任務的協(xié)調(diào)服務。支持分布式調(diào)度協(xié)調(diào)、彈性擴容縮容、失效轉(zhuǎn)移、錯過執(zhí)行作業(yè)重觸發(fā)、并行調(diào)度、自診。
  • 分布式任務 Saturn,Saturn是唯品會在github開源的一款分布式任務調(diào)度產(chǎn)品。它是基于當當elastic-job來開發(fā)的,其上完善了一些功能和添加了一些新的feature。目前在github上開源大半年,470個star。Saturn的任務可以用多種語言開發(fā)比如python、Go、Shell、Java、Php。其在唯品會內(nèi)部已經(jīng)發(fā)部署350+個節(jié)點,每天任務調(diào)度4000多萬次。同時,管理和統(tǒng)計也是它的亮點。

SpringBoot項目的實現(xiàn)方法

1.config配置

import org.quartz.Scheduler;
import org.quartz.ee.servlet.QuartzInitializerListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
?
import java.io.IOException;
import java.util.Properties;
?
/**
?* quartz配置
?*/
@Configuration
public class SchedulerConfig {
?? ?
? ? @Bean(name="SchedulerFactory")
? ? public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
? ? ? ? SchedulerFactoryBean factory = new SchedulerFactoryBean();
? ? ? ? factory.setAutoStartup(true);
? ? ? ? //factory.setStartupDelay(5);//延時5秒啟動
? ? ? ? return factory;
? ? }
?
? ? /*
? ? ?* quartz初始化監(jiān)聽器
? ? ?*/
? ? @Bean
? ? public QuartzInitializerListener executorListener() {
? ? ? ?return new QuartzInitializerListener();
? ? }
?
? ? /*
? ? ?* 通過SchedulerFactoryBean獲取Scheduler的實例
? ? ?*/
? ? @Bean(name="Scheduler")
? ? public Scheduler scheduler() throws IOException {
? ? ? ? return schedulerFactoryBean().getScheduler();
? ? }
?
}

2.實現(xiàn)方法

/**
? ? ?* 新建任務
? ? ?* **/
? ? @ApiOperation(value = "Test-add", notes = "Test-add")
? ? @ApiImplicitParams({
? ? ? ? ? ? @ApiImplicitParam(name = "cruiseId", value = "巡航線id", required = true, paramType = "path"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobName", value = "任務名稱", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobGroup", value = "任務分組", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "executeDate", value = "當前時間[yyyy-MM-dd HH:mm:ss]", required = true, paramType = "query", dataType = "Date")})
? ? @PutMapping("/test/add/{cruiseId}")
? ? public ResultBody test(@PathVariable("cruiseId") String cruiseId,@RequestParam("jobName") String jobName,@RequestParam("jobGroup") String jobGroup,
? ? ? ? ? ? ? ? ? ? ? ? ? ?@RequestParam(value = "executeDate")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date executeDate) {
? ? ? ? try {
? ? ? ? ? ? SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
? ? ? ? ? ? //構建job信息
? ? ? ? ? ? JobDetail job = JobBuilder.newJob(CruisePlanJob.class).withIdentity(jobName, jobGroup)
? ? ? ? ? ? ? ? ? ? ? ? ? ? .withDescription("巡航計劃").build();
? ? ? ? ? ? JobDataMap jobDataMap = job.getJobDataMap();
? ? ? ? ? ? jobDataMap.put("cruiseId", cruiseId);
? ? ? ? ? ? //CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("cron的表達式");
? ? ? ? ? ? Trigger trigger = TriggerBuilder.newTrigger()
? ? ? ? ? ? ? ? ? ? .withIdentity("trigger" + jobName, jobGroup)
? ? ? ? ? ? ? ? ? ? .startAt(executeDate)
? ? ? ? ? ? ? ? ? ? .withSchedule(SimpleScheduleBuilder.simpleSchedule().withRepeatCount(0))
? ? ? ? ? ? ? ? ? ? .build();
? ? ? ? ? ? //SimpleScheduleBuilder.simpleSchedule().withRepeatCount(0).withIntervalInSeconds(20)//每隔多少秒執(zhí)行一次; withRepeatCount 設置重復的次數(shù)
? ? ? ? ? ? //.startNow().withSchedule(cronScheduleBuilder)
? ? ? ? ? ? //交由Scheduler安排觸發(fā)
? ? ? ? ? ? scheduler.scheduleJob(job, trigger);
? ? ? ? ? ? System.out.println("startJob:"+JobKey.jobKey(jobName));
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return ResultBody.failed();
? ? ? ? }
? ? ? ? return ResultBody.ok();
? ? }
?
? ? /**
? ? ?* 刪除任務
? ? ?* **/
? ? @ApiOperation(value = "Test-remove", notes = "Test-remove")
? ? @ApiImplicitParams({
? ? ? ? ? ? @ApiImplicitParam(name = "jobName", value = "任務名稱", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobGroup", value = "任務分組", required = true, paramType = "query")})
? ? @GetMapping("/test/remove")
? ? public ResultBody remove(@RequestParam("jobName") String jobName,@RequestParam("jobGroup") String jobGroup) {
? ? ? ? try {
? ? ? ? ? ? TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
? ? ? ? ? ? // 停止觸發(fā)器
? ? ? ? ? ? scheduler.pauseTrigger(triggerKey);
? ? ? ? ? ? // 移除觸發(fā)器
? ? ? ? ? ? scheduler.unscheduleJob(triggerKey);
? ? ? ? ? ? // 刪除任務
? ? ? ? ? ? boolean result = scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup));
? ? ? ? ? ? System.out.println(result);
? ? ? ? ? ? System.out.println("removeJob:"+JobKey.jobKey(jobName));
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return ResultBody.failed();
? ? ? ? }
? ? ? ? return ResultBody.ok();
? ? }

3.CruisePlanJob類實現(xiàn)具體邏輯

@Slf4j
public class CruisePlanJob implements Job {
?
? @Override
? public void execute(JobExecutionContext context) {
? ? try{
? ? ? JobDataMap jdMap = context.getJobDetail().getJobDataMap();
? ? ? String cruiseId = (String) jdMap.get("cruiseId");
? ? ? String panId = (String) jdMap.get("panId");
? ? ? String userId = (String) jdMap.get("userId");
? ? ? String appId = (String) jdMap.get("appId");
? ? ? //TODO 邏輯待補充
?
? ? ? log.info("cruisePlan-CruisePlanJob-計劃執(zhí)行開始===>panId:{}---cruiseId:{}---appId:{}---userId:{}---resultBody:{}", panId, cruiseId, ?appId, ?userId, resultBody);
? ? }catch (Exception e){
? ? ? e.printStackTrace();
? ? }
? }
?
}

4.另外兩種任務的方法

//恢復任務 ?
scheduler.resumeJob(key);
//停止任務
scheduler.pauseJob(key);

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解定時任務框架Quartz的使用

    詳解定時任務框架Quartz的使用

    Quartz是OpenSymphony開源組織在Job?scheduling領域又一個開源項目,完全由Java開發(fā),可以用來執(zhí)行定時任務,本文就來帶大家聊聊它的具體使用
    2023-02-02
  • MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運行 java 代碼

    MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運行 java 代碼

    這篇文章主要介紹了MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運行 java 代碼,需要的朋友可以參考下
    2014-10-10
  • 解析Mybatis延遲加載問題

    解析Mybatis延遲加載問題

    這篇文章主要介紹了Mybatis的延遲加載問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Java重點之基于比較的七大排序

    Java重點之基于比較的七大排序

    最近幾天在研究排序算法,看了很多博客,發(fā)現(xiàn)網(wǎng)上有的文章中對排序算法解釋的并不是很透徹,而且有很多代碼都是錯誤的,所以我根據(jù)這幾天看的文章,整理了一個較為完整的排序算法總結(jié),本文中的所有算法均有JAVA實現(xiàn),經(jīng)本人調(diào)試無誤后才發(fā)出,如有錯誤,請各位前輩指出
    2021-10-10
  • java中struts配置

    java中struts配置

    本文給大家詳細分析了在java項目中配置Struts的方法和示例,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • Springboot實現(xiàn)接口加密的示例代碼

    Springboot實現(xiàn)接口加密的示例代碼

    Springboot實現(xiàn)一個接口加密 首先來看效果 這個主要是為了防止篡改請求的。 我們這里采用的是一個AOP的攔截,在有需要這樣的接口上添加了加密處理。 下面是一些功能 防篡改 HMAC-SHA25
    2025-08-08
  • Java基礎教程之final關鍵字淺析

    Java基礎教程之final關鍵字淺析

    這篇文章主要給大家介紹了關于Java基礎教程之final關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • spring?IOC的理解之原理和實現(xiàn)過程

    spring?IOC的理解之原理和實現(xiàn)過程

    這篇文章主要介紹了spring?IOC的理解之原理和實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Spring Boot之內(nèi)嵌tomcat版本升級操作示例

    Spring Boot之內(nèi)嵌tomcat版本升級操作示例

    這篇文章主要為大家介紹了Spring Boot之內(nèi)嵌tomcat版本升級操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • springboot如何使用@Value獲取配置文件的值

    springboot如何使用@Value獲取配置文件的值

    這篇文章主要介紹了springboot如何使用@Value獲取配置文件的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

英德市| 大安市| 扶沟县| 乳山市| 尉氏县| 东乌| 株洲市| 长岭县| 房产| 定结县| 吴川市| 上思县| 石棉县| 梅河口市| 德兴市| 正定县| 宜城市| 竹北市| 清水县| 陆丰市| 应用必备| 大冶市| 英吉沙县| 裕民县| 赞皇县| 安顺市| 黔西| 静宁县| 化德县| 高唐县| 托里县| 化德县| 额济纳旗| 沅江市| 无极县| 临猗县| 大新县| 建始县| 长乐市| 余姚市| 大兴区|