返回

巧妙活用SpringBoot和Quartz,轻松打造定时任务(终章)

后端

一、Spring集成Quartz配置详解

1. 导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2. 配置Job和Trigger

2.1 配置Job

@Component
public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        System.out.println("任务执行了");
    }
}

2.2 配置Trigger

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger trigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(30) // 每30秒执行一次
                .repeatForever();
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .withIdentity("myTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}

二、Quartz配置和触发实战

1. 配置Quartz

application.properties中添加以下配置:

spring.quartz.job-store-type=jdbc
spring.datasource.url=jdbc:mysql://localhost:3306/quartz
spring.datasource.username=root
spring.datasource.password=123456

2. 使用Quartz

2.1 启动/关闭任务

@RestController
public class QuartzController {

    @Autowired
    private Scheduler scheduler;

    @GetMapping("/start")
    public String start() {
        scheduler.start();
        return "任务已启动";
    }

    @GetMapping("/stop")
    public String stop() {
        scheduler.shutdown();
        return "任务已停止";
    }
}

2.2 动态添加/修改/删除任务

@RestController
public class QuartzDynamicController {

    @Autowired
    private Scheduler scheduler;

    @PostMapping("/add")
    public String add(@RequestBody JobDetail jobDetail, Trigger trigger) {
        scheduler.scheduleJob(jobDetail, trigger);
        return "任务已添加";
    }

    @PutMapping("/modify")
    public String modify(@RequestBody JobDetail jobDetail, Trigger trigger) {
        scheduler.rescheduleJob(TriggerKey.triggerKey(trigger.getName(), trigger.getGroup()), trigger);
        return "任务已修改";
    }

    @DeleteMapping("/delete")
    public String delete(@RequestBody JobKey jobKey) {
        scheduler.deleteJob(jobKey);
        return "任务已删除";
    }
}

至此,我们已经全面了解了SpringBoot结合Quartz开发定时任务的知识。赶快动手实践,让您的项目也能轻松实现定时任务功能吧!