欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

/**
? ? ?* 新建任務(wù)
? ? ?* **/
? ? @ApiOperation(value = "Test-add", notes = "Test-add")
? ? @ApiImplicitParams({
? ? ? ? ? ? @ApiImplicitParam(name = "cruiseId", value = "巡航線id", required = true, paramType = "path"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobName", value = "任務(wù)名稱", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobGroup", value = "任務(wù)分組", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "executeDate", value = "當(dāng)前時間[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");
? ? ? ? ? ? //構(gòu)建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è)置重復(fù)的次數(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();
? ? }
?
? ? /**
? ? ?* 刪除任務(wù)
? ? ?* **/
? ? @ApiOperation(value = "Test-remove", notes = "Test-remove")
? ? @ApiImplicitParams({
? ? ? ? ? ? @ApiImplicitParam(name = "jobName", value = "任務(wù)名稱", required = true, paramType = "query"),
? ? ? ? ? ? @ApiImplicitParam(name = "jobGroup", value = "任務(wù)分組", 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);
? ? ? ? ? ? // 刪除任務(wù)
? ? ? ? ? ? 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.另外兩種任務(wù)的方法

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

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

相關(guān)文章

  • Java可變參數(shù)的應(yīng)用小結(jié)

    Java可變參數(shù)的應(yīng)用小結(jié)

    這篇文章主要介紹了Java可變參數(shù)的應(yīng)用小結(jié),實現(xiàn)同一個函數(shù)名,不同參數(shù)個數(shù),實現(xiàn)的方法相同,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Java教程package和import訪問控制的步驟詳解

    Java教程package和import訪問控制的步驟詳解

    這篇文章主要為大家介紹了Java教程package和import訪問控制的步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 喜大普奔IntelliJ IDEA 可以使用中文了

    喜大普奔IntelliJ IDEA 可以使用中文了

    IntelliJ Idea最大的亮點開始支持中文,很多英語不好的童鞋有福了,今天通過本文給大家分享如何開啟中文漢化,通過圖文步驟給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-05-05
  • 單例模式的反射漏洞和反序列化漏洞代碼實例

    單例模式的反射漏洞和反序列化漏洞代碼實例

    這篇文章主要介紹了單例模式的反射漏洞和反序列化漏洞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaSE系列基礎(chǔ)包裝類及日歷類詳解

    JavaSE系列基礎(chǔ)包裝類及日歷類詳解

    這篇文章主要介紹的是JavaSE中常用的基礎(chǔ)包裝類以及日歷類的使用詳解,文中的示例代碼簡潔易懂,對我們學(xué)習(xí)JavaSE有一定的幫助,感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • Mybatis中BindingException異常的產(chǎn)生原因及解決過程

    Mybatis中BindingException異常的產(chǎn)生原因及解決過程

    BindingException異常是MyBatis框架中自定義的異常,顧名思義指的是綁定出現(xiàn)問題,下面這篇文章主要給大家介紹了關(guān)于MyBatis報錯BindingException異常的產(chǎn)生原因及解決過程,需要的朋友可以參考下
    2023-06-06
  • SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實現(xiàn)示例

    SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實現(xiàn)示例

    本文主要介紹了SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能的詳細(xì)步驟

    java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能的詳細(xì)步驟

    這篇文章主要介紹了java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能,本文簡單的展示了java調(diào)用FFmpeg命令實現(xiàn)視屏的壓縮的詳細(xì)步驟,需要的朋友可以參考下
    2021-09-09
  • feign客戶端HTTP狀態(tài)碼為204時?響應(yīng)體被忽略的問題

    feign客戶端HTTP狀態(tài)碼為204時?響應(yīng)體被忽略的問題

    這篇文章主要介紹了feign客戶端HTTP狀態(tài)碼為204時?響應(yīng)體被忽略的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳細(xì)談?wù)凧ava中l(wèi)ong和double的原子性

    詳細(xì)談?wù)凧ava中l(wèi)ong和double的原子性

    原子性是指一個操作或多個操作要么全部執(zhí)行,且執(zhí)行的過程不會被任何因素打斷,要么就都不執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于Java中l(wèi)ong和double原子性的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評論