Quartz手动启动任务

首先创建数据库表保存执行任务信息

创建sql(mysql)

-- ----------------------------
-- Table structure for tinycms_quartz_job
-- ----------------------------
DROP TABLE IF EXISTS `tinycms_quartz_job`;
CREATE TABLE `tinycms_quartz_job` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `JOB_NAME` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `OLD_JOB_NAME` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `JOB_GROUP` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `OLD_JOB_GROUP` varchar(20) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `DESCRIPTION` varchar(255) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `CRON_EXPRESSION` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `JOB_CLASS_NAME` varchar(255) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `STATUS` int(10) DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `CREATE_USER` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `UPDATE_USER` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
  `DELETE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_sinhala_ci;

-- ----------------------------
-- Records of tinycms_quartz_job
-- ----------------------------
INSERT INTO `tinycms_quartz_job` VALUES ('1', 'ehrSyncData', '', 'default', '', '同步说明***', '0/5 * * * * ?', 'com.example.springbootbymybatis.quartz.job.OaSyncMeetingNowListJob', '0', '2022-07-06 10:33:42', '', '2022-07-06 10:33:42', 'root', '2022-07-06 10:33:42');
SET FOREIGN_KEY_CHECKS=1;

这里有个字段信息‘com.example.springbootbymybatis.quartz.job.OaSyncMeetingNowListJob’表示你的任务执行路径,如创建的任务类如下

package com.example.springbootbymybatis.quartz.job;


import org.quartz.Job;
import org.quartz.JobExecutionContext;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author Chenxinlele
 * @Date 2022/04/18 09:08
 * @Version 1.0
 */
public class OaSyncMeetingNowListJob implements Job {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");

    @Override
    //执行
    public void execute(JobExecutionContext context) {
        //在此处写上你的业务逻辑
        System.out.println("五秒执行------->"+simpleDateFormat.format(new Date()));
        };
    }

0/5 * * * * ?为执行的时间(每5秒),可自行编写业务需求。

接下来为主要的服务类讲解

package com.example.springbootbymybatis.Service;

import com.example.springbootbymybatis.entity.tinycmsQuartzJob;
import com.example.springbootbymybatis.mapper.QuartzMapper;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class QuartzService {

    @Autowired
    QuartzMapper quartzMapper;

    @Autowired
    private Scheduler scheduler;

    public tinycmsQuartzJob Sel(int id) {
        return quartzMapper.Sel(id);
    }

    
    //启动任务类
    public Boolean startQuartzJob(tinycmsQuartzJob quartzJob) {
        JobKey key = new JobKey(quartzJob.getJob_name(), quartzJob.getJob_group());
        try {
            //构建job信息
            Class clazz = null;
            try {
                clazz = Class.forName(quartzJob.getJob_class_name());
                clazz.newInstance();
            } catch (Exception e) {
                clazz = null;
            }
            if (!scheduler.checkExists(key)) {
                JobDetail job = JobBuilder.newJob(clazz).withIdentity(quartzJob.getJob_name(),
                        quartzJob.getJob_group())
                        .withDescription(quartzJob.getDescription()).build();
                // 触发时间点
                CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCron_expression().trim());
                /*Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-" + quartzJob.getJob_name(), quartzJob.getJob_group())
                        .startNow().withSchedule(cronScheduleBuilder).build();*/

                Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("trigger-" + quartzJob.getJob_name(), quartzJob.getJob_group())
                        .withSchedule(cronScheduleBuilder).build();
                //交由Scheduler安排触发
                try {
                    scheduler.scheduleJob(job, trigger1);
                } catch (SchedulerException se) {

                }
            }
            scheduler.triggerJob(key);
            return true;
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        return false;

    }


    //删除任务,也就相当于停止了任务,如要删除数据库中信息可在逻辑中编写相关删除数据库信息
    public void deleteQuartzJob(tinycmsQuartzJob quartzJob) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(quartzJob.getJob_name(), quartzJob.getJob_group());
            // 停止触发器
            scheduler.pauseTrigger(triggerKey);
            // 移除触发器
            scheduler.unscheduleJob(triggerKey);
            // 删除任务
            scheduler.deleteJob(JobKey.jobKey(quartzJob.getJob_name(), quartzJob.getJob_group()));
            System.out.println("removeJob:" + JobKey.jobKey((quartzJob.getJob_name())));
        } catch (Exception e) {
            e.getMessage();
        }
    }


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值