Quartz代码案例

代码示例

  • controller代码
//省去controller其他代码
 @Autowired
 private Scheduler scheduler;

//创建多个cron触发器
@GetMapping("createCronTriggerHasRetry")
public Result<?> createCronTriggerHasRetry() {
        String jobHandlerClass = "sayHelloHandler";
        String name = "cron4";
        String groupName = "bug4";
        JobKey jobKey = new JobKey(name, groupName);

        JobDetail jobDetail = JobBuilder.newJob().ofType(CronJob.class)
                .withIdentity(name, groupName)
                .withDescription("测试Cron触发起重复执行")
                .usingJobData(JOB_DATA_KEY, "jobDataTestParam")
                .usingJobData(JOB_HANDLER_CLASS_KEY, jobHandlerClass)
                .build();

        //每天11小时28,39分钟执行一次
        String cron1 = "0 28,39 11 * * ?";
        Trigger trigger1 = TriggerBuilder.newTrigger().forJob(jobDetail)
                .withIdentity(name + "_trigger1", groupName)
                .withSchedule(CronScheduleBuilder.cronSchedule(cron1)).build();
        bindTriggerWithJobDetail(jobKey, trigger1, jobDetail);
        //每天11小时31分钟执行一次
        String cron2 = "0 31 11 * * ?";
        Trigger trigger2 = TriggerBuilder.newTrigger().forJob(jobDetail)
                .withIdentity(name + "_trigger2", groupName)
                .withSchedule(CronScheduleBuilder.cronSchedule(cron2)).build();
        bindTriggerWithJobDetail(jobKey, trigger2, jobDetail);

        return Results.newSuccessResult("ok");
    }
  • CronJob代码
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;


@Setter
@Slf4j
public class CronJob implements Job {

    private ApplicationContext applicationContext;

    private String jobData;

    private String jobHandlerClass;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("CronJob  data: " + jobData + ", jobHandlerClass: " + jobHandlerClass);
        MessageHandler messageHandler = (MessageHandler) applicationContext.getBean(jobHandlerClass);
        try {
            messageHandler.handlerMessage(jobData);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}
  • SayHelloHandler
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 定时任务具体执行的业务逻辑.
 *
 * @author xx
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class SayHelloHandler implements MessageHandler {


    @Override
    public void handlerMessage(String jobData) throws JsonProcessingException {
        log.info("--SayHelloHandler:{}--", jobData);
    }

}

查询生成的触发起和 Job数据

//查询生成的触发器
select * from qrtz_cron_triggers ;
//查询生成的Job
select * from qrtz_job_details;

1.png

WX20230413-113802@2x.png

cron表达式生成工具

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz 是一个开源的、基于 Java 实现的定时任务调度框架,可以非常方便地实现定时任务的调度和管理。 下面是一个使用 Quartz 实现定时任务的示例代码: 1. 导入相关依赖包 ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 创建 Job 类 ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 定时任务执行的逻辑代码 System.out.println("Hello Quartz!"); } } ``` 3. 创建 Trigger ```java // 创建一个每分钟执行一次的 Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(60) .repeatForever()) .build(); ``` 4. 创建 Scheduler ```java // 创建 Scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); // 创建 JobDetail JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); // 将 Trigger 和 JobDetail 注册到 Scheduler 中 scheduler.scheduleJob(jobDetail, trigger); ``` 完整的示例代码如下: ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; public class QuartzDemo { public static void main(String[] args) throws SchedulerException { // 创建 Scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); // 创建 JobDetail JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); // 创建一个每分钟执行一次的 Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(60) .repeatForever()) .build(); // 将 Trigger 和 JobDetail 注册到 Scheduler 中 scheduler.scheduleJob(jobDetail, trigger); } public static class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 定时任务执行的逻辑代码 System.out.println("Hello Quartz!"); } } } ``` 这个示例代码中创建了一个每分钟执行一次的定时任务,你可以根据需要修改 Trigger 的执行规则来实现不同的定时任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值