Spring Boot 整合Quartz以及动态控制任务(暂停,启动,修改执行时间)

原文 https://blog.csdn.net/yali_aini/article/details/85287074

Spring Boot 整合Quartz以及动态控制任务(暂停,启动,修改执行时间)

整合 Quartz定时器

     <!-- quartz 坐标 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>

集成接口式定时器

1 集成Job

public class TestJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {


        System.out.println(" ------------ quartz 控制台定时器 ------------------ ");
    }


    public static void main(String[] args) throws SchedulerException {


        // 1,创建 job,你要做什么事?
        JobDetail job = JobBuilder.newJob(TestJob.class).build();

        // 2,创建  trigger ,你在什么时候做?
        Trigger trigger = TriggerBuilder
                .newTrigger()
                //.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(2)).build();
                //可以换成cron表达式
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();

        // 3,创建 schedule 对象,在什么时候执行什么事?
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        scheduler.scheduleJob(job, trigger);
        // 4,启动
        scheduler.start();

    }
}

Quartz 启动 更新 停止

新建任务
@Component
public class Job {


    public void job() {

        System.out.println("--------------- 执行任务 --------------");
    }
}

配置定时器
@Configuration
public class QuartzConfig {

    // 定义方法,做什么
    @Bean(name = "job1")
    public MethodInvokingJobDetailFactoryBean job1(Job job) {
        MethodInvokingJobDetailFactoryBean factoryBean = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        factoryBean.setConcurrent(false);
        // 使用哪个对象
        factoryBean.setTargetObject(job);
        // 使用哪个方法
        factoryBean.setTargetMethod("job");

        return factoryBean;
    }

    // 定义什么时候做,使用 cron 表达式
    @Bean(name = "cron1")
    public CronTriggerFactoryBean cron1(@Qualifier("job1") MethodInvokingJobDetailFactoryBean job1) {
        CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
        // 设置job对象
        factoryBean.setJobDetail(job1.getObject());
        // 设置执行时间
        factoryBean.setCronExpression("0/5 * * * * ?");
        return factoryBean;
    }


    //  创建 Scheduler 对象
    //  定义 任务,传入 triggers
    @Bean(name = "sch1")
    public SchedulerFactoryBean scheduler1(Trigger... triggers) {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        // 设置 triggers
        factoryBean.setTriggers(triggers);
        // 自动运行
        factoryBean.setAutoStartup(true);

        return factoryBean;
    }

}
对外提供配置启动更新接口
/**
 * @description: 定时器控制层
 * @author: Administrator
 * @create: 2020-05-24 15:35
 **/
@RestController
public class QuartzController {


    @Autowired
    @Qualifier("sch1")
    private Scheduler scheduler;

    /**
     * 关闭任务
     */
    @RequestMapping("/pause")
    public String pause() throws Exception {

        System.out.println(scheduler);
        //任务名
        JobKey key = new JobKey("job1");
        scheduler.pauseJob(key);
        System.out.println(" ----------  关闭成功 ---------- ");
        return "pause";


    }

    /**
     * 执行任务
     */
    @RequestMapping("/start")
    public String start() throws Exception {

        System.out.println(scheduler);

        JobKey key = new JobKey("job1");
        scheduler.resumeJob(key);
        System.out.println(" ----------  启动成功 ---------- ");
        return "start";
    }


    /**
     * 动态修改任务执行的时间
     */
    @RequestMapping("/trigger")
    public String trigger() throws Exception {
        // 获取任务
        JobKey jobKey = new JobKey("job1");
        // 获取 jobDetail
        JobDetail jobDetail = scheduler.getJobDetail(jobKey);
        // 生成 trigger
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
                .build();
        // 删除任务,不删除会报错。报任务已存在
        scheduler.deleteJob(jobKey);
        // 启动任务
        scheduler.scheduleJob(jobDetail, trigger);
        System.out.println(" ----------  更新启动成功 ---------- ");
        return "trigger";
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TizzyGoodhealth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值