springboot 2.x整合Quartz(二)动态配置

配置触发器工厂

 

package com.quartz.quartzdemo.conf;

import com.quartz.quartzdemo.quartz.RefreshTrbase;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {
 

    // 配置Scheduler
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory() {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 延时启动,应用启动1秒后
        bean.setStartupDelay(1);
        // 注册触发器
        //bean.setTriggers(firstTrigger, secondTrigger);
        return bean;

    }
}

 

添加执行 job

import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class RefreshTrbase2 implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        log.info("执行....");
    }
}

 

启动任务

@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner {
    
    @Autowired
    private SchedulerFactoryBean scheduler;

    @Autowired
    private RefreshTrbase2 refreshTrbase2;

    //启动服务执行方法
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("通过实现ApplicationRunner接口,在spring boot项目启动后打印参数");

        System.out.println();
        scheduleAddCronTrigger();
    }


    public void scheduleAddCronTrigger() throws SchedulerException, ParseException {
        //构建job信息
        JobDetail jobDetail = JobBuilder.newJob(refreshTrbase2.getClass()).withIdentity("jobName", "jobGroup").build();
        
        //表达式调度构建器(即任务执行的时间)
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("* * * * * ?");

        //SimpleScheduleBuilder是简单调用触发器,它只能指定触发的间隔时间和执行次数;
        SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder
                .simpleSchedule()//创建一个SimpleScheduleBuilder
                .withIntervalInSeconds(0)//指定一个重复间隔,以毫秒为单位。
                .withRepeatCount(0)//指定反复的次数
                ;

        Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2019-09-20 16:56:00");
        //按新的cronExpression表达式构建一个新的trigger
        SimpleTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("jobName", "jobGroup")
                .withSchedule(simpleScheduleBuilder)
                .startAt(startDate)//启动时间
                .build();

        scheduler.getScheduler().scheduleJob(jobDetail,trigger);
        log.info("定时任务添加完成");
    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值