栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Quartz 持久化到MySQL 并创建触发器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Quartz 持久化到MySQL 并创建触发器

示例:

    pom.xml

  
        
            org.springframework.boot
            spring-boot-starter-quartz
        

   实现步骤:

    1. 

import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.example.config.ConfigurationJSON;
import org.example.config.quartz.DelQuartzJob;
import org.example.utils.QuartzCronDateUtils;
import org.example.config.quartz.AddQuartzJob;
import org.example.model.common.CommonResult;
import org.example.model.common.JsonTMSBean;
import org.example.model.entity.PersonnelAccessAuthority;
import org.example.service.PersonnelReceivingService;
import org.example.service.QuartzService;
import org.example.utils.HttpClientUtils;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;


@Slf4j
@Service
public class PersonnelReceivingServiceImpl  implements PersonnelReceivingService {

    
     @Autowired
     QuartzService quartzService;
     @Autowired
      Scheduler  scheduler;

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    Map map = new HashMap(2);

    @Override
    public String  receiveLeaveCancellation( ) {
             try {
                   String personCode1 ="2222222";
                    String startTime ="2021-10-17 11:45:00";
                    String endTime ="2021-10-17 11:45:00";
                    有效期开始时间
                    String personCodeTime=personCode1+"_"+startTime;
                    map.put("personCode",personCode1);
                    Date parse = sdf.parse(startTime);
                    long starTime = parse.getTime();
                    //10分钟
                    long time1= 10*60*1000;
                    Date startDate = new Date(starTime - time1);
                    String cron = QuartzCronDateUtils.getCron(startDate);
                    JobKey jobKey = JobKey.jobKey("addJob","addGroup");
                    JobDetail jobDetail1 = scheduler.getJobDetail(jobKey);
                    if(jobDetail1==null){
                        quartzService.addJob(AddQuartzJob.class,"addJob", "addGroup",personCodeTime, cron,map);
                    }else {
                        quartzService.addTrigger(jobDetail1, personCodeTime,"addGroup", cron,map);

                    }
                    //有效期截止时间
                    String personCodeEndTime=personCode1+"_"+endTime;
                    Date parseendTime = sdf.parse(endTime);
                    long timeTime = parseendTime.getTime();
                    //13分钟
                    long time2= 30*60*1000;
                    Date endDate = new Date(timeTime + time2);
                    String endCron = QuartzCronDateUtils.getCron(endDate);
                    JobKey updatejobKey = JobKey.jobKey("updateJob","updateGroup");
                    JobDetail jobDetailUpdate = scheduler.getJobDetail(updatejobKey);
                    if(jobDetailUpdate==null){
                        quartzService.delJob(DelQuartzJob.class,"updateJob", "updateGroup",personCodeEndTime, endCron,map);
                    }else {
                        quartzService.delTrigger(jobDetailUpdate, personCodeEndTime,"updateGroup", endCron,map);

                    }

        }catch (Exception ex){
              log.error(personnelAccessAuthority +"人员信息数据转换失败:"+ex.getMessage());
        }
        return  null
    }

}
package org.example.service;

import org.example.config.quartz.AddQuartzJob;
import org.example.config.quartz.DelQuartzJob;
import org.quartz.JobDetail;

import java.util.Map;


public interface QuartzService {


    
    void addJob(Class jobClass, String jobName, String jobGroupName, String triggerName, String jobTime, Map jobData);

    void addTrigger(JobDetail jobDetail, String personCodeTime, String jobGroupName, String cron, Map map);

    void delJob(Class delQuartzJobClass, String updateJob, String updateGroup, String personCodeEndTime, String endCron, Map map);

    void delTrigger(JobDetail jobDetailUpdate, String personCodeEndTime, String updateGroup, String endCron, Map map);
}
package org.example.service.impl;


import lombok.extern.slf4j.Slf4j;
import org.example.config.quartz.AddQuartzJob;
import org.example.config.quartz.DelQuartzJob;
import org.example.service.QuartzService;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.*;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.TriggerBuilder.newTrigger;


@Slf4j
@Service
public class QuartzServiceImpl implements QuartzService {

    @Autowired
    private Scheduler scheduler;

    @PostConstruct
    public void startScheduler() {
        try {
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    
    @Override
    public void addJob(Class jobClass,
                            String jobName,
                            String jobGroupName,
                            String triggerName,
                            String jobTime,
                            Map jobData) {
        try {
            // 创建jobDetail实例,绑定Job实现类
            // 指明job的名称,所在组的名称,以及绑定job类
            // 任务名称和组构成任务key
            JobDetail  jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName)
                    .build();
            // 设置job参数jobName
            if(jobData!= null && jobData.size()>0){
                jobDetail.getJobDataMap().putAll(jobData);
            }
            // 定义调度触发规则
            // 使用cornTrigger规则
            // 触发器key
            Trigger trigger = newTrigger().withIdentity(triggerName, jobGroupName)
                    .startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
                    .withSchedule(cronSchedule(jobTime)).build();

            // 把作业和触发器注册到任务调度中
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            log.error("添加出入权限任务失败:"+e.getMessage());
        }
    }

    
    @Override
    public void addTrigger(JobDetail jobDetail1, String personCodeTime, String jobGroupName, String cron, Map jobData) {
        try {
            // 设置job参数jobName
            if(jobData!= null && jobData.size()>0){
                jobDetail1.getJobDataMap().putAll(jobData);
            }
            // 定义调度触发规则
            // 把作业和触发器注册到任务调度中
            scheduler.scheduleJob(newTrigger().withIdentity(new TriggerKey(personCodeTime, jobGroupName)).withSchedule(
                    cronSchedule(cron)).forJob(jobDetail1).build());
        } catch (Exception e) {
            log.error("添加出入权限触发器失败:"+e.getMessage());
        }
    }

    
    @Override
    public void delJob(Class jobClass,
                       String jobName,
                       String jobGroupName,
                       String triggerName,
                       String jobTime,
                       Map jobData) {
        try {
            // 创建jobDetail实例,绑定Job实现类
            // 指明job的名称,所在组的名称,以及绑定job类
            // 任务名称和组构成任务key
            JobDetail  jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName)
                    .build();
            // 设置job参数jobName
            if(jobData!= null && jobData.size()>0){
                jobDetail.getJobDataMap().putAll(jobData);
            }
            // 定义调度触发规则
            // 使用cornTrigger规则
            // 触发器key
            Trigger trigger = newTrigger().withIdentity(triggerName, jobGroupName)
                    .startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
                    .withSchedule(cronSchedule(jobTime)).build();

            // 把作业和触发器注册到任务调度中
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            log.error("修改出入任务失败:"+e.getMessage());
        }
    }

    
    @Override
    public void delTrigger(JobDetail jobDetailUpdate, String personCodeEndTime, String updateGroup, String endCron, Map jobData) {
        try {
            // 设置job参数jobName
            if (jobData != null && jobData.size() > 0) {
                jobDetailUpdate.getJobDataMap().putAll(jobData);
            }
            // 定义调度触发规则
            // 把作业和触发器注册到任务调度中
            scheduler.scheduleJob(newTrigger().withIdentity(new TriggerKey(personCodeEndTime, updateGroup)).withSchedule(
                            cronSchedule(endCron)).forJob(jobDetailUpdate).build());
        } catch (Exception e) {
            log.error("添加修改出入权限触发器失败:" + e.getMessage());
        }
       }
    }
package org.example.config.quartz;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.example.config.ConfigurationJSON;
import org.example.model.common.DataModel;
import org.example.model.common.JsonTMSBean;
import org.example.model.common.TmsLeaveCancelPerson;
import org.example.utils.HttpClientUtils;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;


@Component
public class AddQuartzJob extends QuartzJobBean {


    @Override
    protected void executeInternal(JobExecutionContext arg0)  {
            JsonTMSBean jsonTMSBean=null;
            //人员权限信息
            TmsLeaveCancelPerson tmsLeaveCancelPerson =null;
            // 获取参数
            JobDataMap jobDatQuartzCronDateUtilsaMap = arg0.getJobDetail().getJobDataMap();
            System.out.println(new Date() +"     新增执行的业务====="+JSON.toJSonString(jobDatQuartzCronDateUtilsaMap));
            // 业务逻辑
            String personCode = jobDatQuartzCronDateUtilsaMap.getString("personCode");
           
    }

}
package org.example.utils;
import java.text.SimpleDateFormat;
import java.util.Date;



public class QuartzCronDateUtils {
    
    public static String formatDateByPattern(Date date,String dateFormat){
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        String formatTimeStr = null;
        if (date != null) {
            formatTimeStr = sdf.format(date);
        }
        return formatTimeStr;
    }
    
    public static String getCron(Date  date){
        String dateFormat="ss mm HH dd MM ? yyyy";
        return formatDateByPattern(date,dateFormat);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号