Quartz框架轻量级定时任务

本文介绍了如何在SpringBoot项目中使用Quartz框架添加定时任务,包括添加Quartz依赖、创建配置类QuartzConfig、定义JobDetail和CronJob业务逻辑,以及如何通过Spring自动装配注入相关服务。
摘要由CSDN通过智能技术生成

1、mop文件添加定时器依赖。

        <!--定时器依赖-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

2、创建QuartzConfig配置类。

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail printTimeJobDetailY(){
        //调用JobBuilder的静态方法来创建JobDetail对象,并指定要执行的任务类(即CronJob类)
        return JobBuilder.newJob(CronJobY.class)
                //可以给该JobDetail起一个id
                .withIdentity("DateTimeJobY")
                //每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取//关联键值对
                .usingJobData("msg", "Hello Quartz")
                //即使没有Trigger关联时,也不需要删除该JobDetail
                .storeDurably()
                .build();
    }

//如果你还有其他的定时任务可以在复制上面的Bean,然后创建对应的业务CronJobM类即可,如下

    @Bean
    public JobDetail printTimeJobDetailM(){
        //调用JobBuilder的静态方法来创建JobDetail对象,并指定要执行的任务类(即CronJob类)
        return JobBuilder.newJob(CronJobM.class)
                //可以给该JobDetail起一个id
                .withIdentity("DateTimeJobM")
                //每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取//关联键值对
                .usingJobData("msg", "Hello Quartz")
                //即使没有Trigger关联时,也不需要删除该JobDetail
                .storeDurably()
                .build();
    }

3、创建业务类CronJob。

/**
 * <p>
 * 定时任务job: 每年几月份执行
 * </p>
 *
 * @author Wen Changping
 * @date 2023/9/4 10:37
 */
@Slf4j
public class CronJobY extends QuartzJobBean {

    @Autowired
    private ItemConfigMapper itemConfigMapper;
    @Autowired
    private MAuItKpiFactMapper mAuItKpiFactMapper;
    @Autowired
    private ItemConfigServiceImpl itemConfigService;

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //获取JobDetail中关联的数据
        String msg = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("msg");
        log.info("定时任务启动"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+msg);

        /*
        定时执行每年几月
         */
        List<RuleConfigInfoJobVo> ruleConfigInfoJobVos = itemConfigMapper.yExecuteRuleJob();
        log.info("定时执行每年几月:{}",ruleConfigInfoJobVos);
        if (ruleConfigInfoJobVos != null){
            ruleConfigInfoJobVos.forEach(i ->{
                //定时任务无法获取当前登录用户id,所以这里获取新增预警项目配置的用户id做执行时的用户id及用户名等
                ExecuteTriggerConfigInfoDTO dto = new ExecuteTriggerConfigInfoDTO();
                dto.setRuleId(i.getRuleId());
                dto.setScanBegDate(i.getPreviousMonthDate());
                dto.setScanEndDate(i.getPreviousMonthDate());
                PMUserVo pmUser = mAuItKpiFactMapper.getPMUserByUserId(i.getAddUser());
                if (pmUser!=null){
                    dto.setCreateStaffName(pmUser.getUserName());
                    dto.setAddUser(String.valueOf(pmUser.getUserId()));
                    dto.setCreateStaffCode(String.valueOf(pmUser.getUserId()));
                }
                //执行
                itemConfigService.executeRule(dto);
            });
        }

    }
}

注:你有多个定时任务,则需要创建多个CronJob业务类,然后在QuartzConfig配置类中添加对应的Bean即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值