欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何對(duì)xxl-job進(jìn)行simpleTrigger并動(dòng)態(tài)創(chuàng)建任務(wù)擴(kuò)展

這篇文章給大家分享的是有關(guān)如何對(duì)xxl-job進(jìn)行simpleTrigger并動(dòng)態(tài)創(chuàng)建任務(wù)擴(kuò)展的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了向陽免費(fèi)建站歡迎大家使用!

業(yè)務(wù)場(chǎng)景

需求上要求能實(shí)現(xiàn)quartz的simpleTrigger任務(wù),同時(shí)還需要?jiǎng)討B(tài)的創(chuàng)建任務(wù)而非在控制面板上創(chuàng)建,查閱xxl-job官方文檔發(fā)現(xiàn)simpelTrigger其暫時(shí)還躺在to do list,而動(dòng)態(tài)創(chuàng)建可以調(diào)用JobInfoController其add和start接口(但是有個(gè)弊端,start/stop/remove等方法都只要求傳送id,這點(diǎn)上可以自己擴(kuò)展接口實(shí)現(xiàn)),還需要放開登錄權(quán)限,接下來就老夫上去就上一梭子,開干。

job_info字段調(diào)整說明

CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',
  `job_cron` varchar(128) DEFAULT NULL COMMENT '任務(wù)執(zhí)行CRON',
  `job_desc` varchar(255) NOT NULL,
  `add_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `author` varchar(64) DEFAULT NULL COMMENT '作者',
  `alarm_email` varchar(255) DEFAULT NULL COMMENT '報(bào)警郵件',
  `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執(zhí)行器路由策略',
  `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',
  `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',
  `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略',
  `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務(wù)執(zhí)行超時(shí)時(shí)間,單位秒',
  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',
  `glue_type` varchar(50) NOT NULL COMMENT 'GLUE類型',
  `glue_source` mediumtext COMMENT 'GLUE源代碼',
  `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE備注',
  `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新時(shí)間',
  `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務(wù)ID,多個(gè)逗號(hào)分隔',
  `ext_reamrk` varchar(255) DEFAULT NULL,
  `job_start_time` bigint(20) DEFAULT NULL COMMENT 'trigger開始時(shí)間于當(dāng)前時(shí)間的時(shí)間間隔 單位毫秒\n',
  `job_end_time` datetime DEFAULT NULL COMMENT 'trigger結(jié)束時(shí)間',
  `job_repeat_count` bigint(7) DEFAULT '-1' COMMENT 'simple_trigger 執(zhí)行次數(shù) ',
  `job_repeat_interval` bigint(12) DEFAULT NULL COMMENT 'simple_trigger 時(shí)間間隔 單位毫秒',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  • job_cron設(shè)為空,支持simpleTrigger;

  • ext_reamrk自定義擴(kuò)展字段,可以根據(jù)它來刷選job從而避免start/stop/remove接口只有id作為參數(shù);

  • job_repeat_count,simplerTrigger的執(zhí)行次數(shù),默認(rèn)-1即為無限次,0的話是執(zhí)行1次;

  • job_repeat_interval,simplerTrigger每次執(zhí)行的時(shí)間間隔,單位毫秒;

  • job_start_time,trigger開始時(shí)間和當(dāng)前時(shí)間的時(shí)間間隔,單位毫秒;

  • job_end_time,trigger結(jié)束時(shí)間

重寫啟動(dòng)任務(wù)

xxl-job在新建任務(wù)的時(shí)候只是把job數(shù)據(jù)保存到數(shù)據(jù)庫里,只有啟動(dòng)的時(shí)候才會(huì)創(chuàng)建jobDetailtrigger并由scheduler來啟動(dòng)job。

重寫XxlJobDynamicScheduleraddJob方法:根據(jù)jobInfo中的值構(gòu)建cron的trigger還是simple的trigger。

public static boolean addJob(XxlJobInfo xxlJobInfo) throws SchedulerException {
        String jobName = String.valueOf(xxlJobInfo.getId());
        String cronExpression = xxlJobInfo.getJobCron();
        Integer jobRepeatCount = xxlJobInfo.getJobRepeatCount();
        Long jobRepeatInterval = xxlJobInfo.getJobRepeatInterval();

        // 1、job key
        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
        JobKey jobKey = new JobKey(jobName);

        // 2、valid trigger
        if(scheduler.checkExists(triggerKey)) {
            return true;
        }

        // 3.1、corn trigger
        Trigger trigger = null;
        if (!StringUtils.isEmpty(cronExpression)) {
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();   // withMisfireHandlingInstructionDoNothing 忽略掉調(diào)度終止過程中忽略的調(diào)度
            TriggerBuilder<CronTrigger> builder = TriggerBuilder.newTrigger().withIdentity(triggerKey)
                    .withSchedule(cronScheduleBuilder)
                    .endAt(xxlJobInfo.getJobEndTime());
            Optional.ofNullable(xxlJobInfo.getJobStartTime())
                    .ifPresent(start -> builder.startAt(new Date(System.currentTimeMillis() + start)));
            trigger = builder.build();
        } else
        // 3.2、simple trigger
        if (Objects.nonNull(jobRepeatInterval) && Objects.nonNull(jobRepeatCount)) {
            SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInMilliseconds(jobRepeatInterval)
                    .withRepeatCount(jobRepeatCount);
            TriggerBuilder<SimpleTrigger> builder = TriggerBuilder.newTrigger().withIdentity(triggerKey)
                    .withSchedule(simpleScheduleBuilder)
                    .endAt(xxlJobInfo.getJobEndTime());
            Optional.ofNullable(xxlJobInfo.getJobStartTime())
                    .ifPresent(start -> builder.startAt(new Date(System.currentTimeMillis() + start)));
            trigger = builder.build();
        }
        // 3.3、valid trigger
        if(Objects.isNull(trigger)) {
            return true;
        }

        // 4、job detail
        Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass());
        JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();

        /*if (jobInfo.getJobData()!=null) {
            JobDataMap jobDataMap = jobDetail.getJobDataMap();
            jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));  
            // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
        }*/

        // 5、schedule job
        Date date = scheduler.scheduleJob(jobDetail, trigger);

        logger.info(">>>>>>>>>>> addJob success(quartz), jobDetail:{}, trigger:{}, date:{}", jobDetail, trigger, date);
        return true;
    }

感謝各位的閱讀!關(guān)于“如何對(duì)xxl-job進(jìn)行simpleTrigger并動(dòng)態(tài)創(chuàng)建任務(wù)擴(kuò)展”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)站標(biāo)題:如何對(duì)xxl-job進(jìn)行simpleTrigger并動(dòng)態(tài)創(chuàng)建任務(wù)擴(kuò)展
瀏覽地址:http://aaarwkj.com/article32/ipdpsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、ChatGPT標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作網(wǎng)站收錄、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
自由成熟性生活免费视频| 亚洲天堂毛片在线观看| 能在线播放的国产三级| 亚洲国产日韩精品自拍av| 手机蜜臀av在线播放| 男女在线视频网站免费| 中文字幕在线一级色视频| 亚洲高清无毛一区二区| 免费亚洲一区二区三区| 福利一区福利二区视频| 久久精品一区二区婷婷| 日日夜夜久久国产精品| 禁区正片免费看完整国产| 久久五十路六十路熟妇中出| 精品一区二区视频在线观看网站| 日韩人妻中文字幕专区| 午夜福利精品在线观看| 丰满人妻侵犯中文字幕| 亚洲欧美日韩不卡视频| 国产亚洲一区二区三区在线| 欧美十日本亚洲激情视频| 亚洲美女插入av网络导航| 成人精品颜射少妇内射| 一区二区三区av天堂| 欧美av一区二区三区四区| 亚洲中文字幕激情中午字幕 | 日韩不卡在线免费观看视频| 青青草国产自拍在线视频| 久久精品女人天堂av| 国产91美女黄色在线观看| 在线不卡日本v二区| 亚洲综合偷拍日韩av| 操老熟女一区二区三区| 熟年人妻一区二区三区| 国产乱人伦真实精品视频| 亚洲国产欧美日韩在线不卡成人| 亚洲黄香蕉视频免费看| 涩涩涩丁香色婷五月网| 成年免费视频一区二区三区| 久久精品国产亚洲av无| 亚洲精品不卡一二三区|