Skip to content

使用Quartz实现定时作业

Yizzuide edited this page Jan 2, 2020 · 4 revisions

依赖版本

1.18.0+

安装

当前文档使用的版本为1.18.1,使用以下坐标安装:

<dependency>
  <groupId>com.github.yizzuide</groupId>
  <artifactId>milkomeda-spring-boot-starter</artifactId>
  <version>1.18.1</version>
</dependency>

<!-- quartz -->
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
</dependency>

开始使用

配置

spring:
  quartz:
    # 任意取个调度器别名
    scheduler-name: neutron
    # 是否覆盖已存在的job
    overwrite-existing-jobs: true
    # 强制关闭任务时,是否等待任务执行完成
    wait-for-jobs-to-complete-on-shutdown: true

启用模块

@EnableNeutron
@SpringBootApplication
public class MilkomedaDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MilkomedaDemoApplication.class, args);
    }
}

实现

@RestController
@RequestMapping("neutron")
public class NeutronController {

    private static String jobName = "neutron_rotation";

    @RequestMapping("add")
    public ResponseEntity<?> add() {
        Neutron.addJob(jobName, NeutronJob.class, "1/5 * * * * ?");
       // 动态添加实现
       // String clazzName = 从数据库读取配置的class
       // Class clazz = Class.forName(clazzName)
       // Neutron.addJob(jobName, (Class<? extends Job>)clazz, "1/5 * * * * ?")
        return ResponseEntity.status(HttpStatus.OK).build();
    }

    @RequestMapping("remove")
    public ResponseEntity<?> remove() {
        Neutron.removeJob(jobName);
        return ResponseEntity.status(HttpStatus.OK).build();
    }

    @RequestMapping("update")
    public ResponseEntity<?> update() {
        Neutron.modifyJobTime(jobName, "* * * * * ?");
        return ResponseEntity.status(HttpStatus.OK).build();
    }

}