Springboot整合quartz

简介: Springboot整合quartz

文章目录

介绍

平时在工作中经常会用到定时任务,如自动实现计费,扫描订单,清理日志,数据定时抽取等等。本篇将介绍springboot整合quartz实现定时任务以及springboot自带的定时任务。

springboot的定时任务

启动类

/**

* 启动类

*/

@SpringBootApplication

//@EnableScheduling

public class SpringbootQuartzApplication {

   public static void main( String[] args )

   {

       SpringApplication.run(SpringbootQuartzApplication.class,args);

   }

}

定时任务类

@EnableScheduling 开启注解,以及@Scheduled 配置定时任务执行的时间即可。

import org.springframework.context.annotation.Configuration;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

import java.text.SimpleDateFormat;

import java.util.Date;

@Configuration

@EnableScheduling

public class SimpleSchedule {

   //每五秒执行一次

   @Scheduled(cron="*/5 * * * * ?")

   public void schedule(){

       System.out.println("执行定时任务..."+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

   }

}

3d9ec44af4994099afff9661977efec1.png

quartz定时任务

依赖

 <dependency>

     <groupId>org.springframework.boot</groupId>

     <artifactId>spring-boot-starter-quartz</artifactId>

   </dependency>

   <dependency>


实体类

创表语句:

-- quartz.sys_job definition

CREATE TABLE `sys_job` (

 `job_id` int NOT NULL AUTO_INCREMENT,

 `job_class` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '任务类名',

 `job_cron` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'cron表达式',

 `job_params` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '参数',

 `job_desc` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '描述',

 `job_status` int DEFAULT NULL COMMENT '状态 1正常 0停止',

 `create_by` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建人',

 `create_time` datetime DEFAULT NULL COMMENT '创建时间',

 `del_flag` int DEFAULT NULL COMMENT '删除状态',

 `update_by` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '修改人',

 `update_time` datetime DEFAULT NULL COMMENT '修改时间',

 PRIMARY KEY (`job_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

实体类

@Data

@TableName("`sys_job`")

public class SysJob implements Serializable {

   @TableId(value = "job_id",type = IdType.AUTO )

   private Integer jobId;

   //任务类

   @TableField(value = "job_class")

   private String jobClass;

   //定时任务表达式

   @TableField(value = "job_cron")

   private String jobCron;

   //任务参数

   @TableField(value = "job_params")

   private String jobParams;

   //任务描述

   @TableField(value = "job_desc")

   private String jobDesc;

   //任务状态 1 正常 0 停止

   private String jobStatus;

   //是否逻辑删除

   @TableLogic

   @TableField(value = "del_flag")

   private String delFlag;

   //创建人

   @TableField(value = "create_by")

   private String createBy;

   //创建时间

   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

   @TableField(value = "create_time",fill = FieldFill.INSERT)

   private String createTime;

   //更新人

   @TableField(value = "update_by")

   private String updateBy;

   //更新时间

   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

   @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)

   private String updateTime;

}

对于任务进行CRUD操作

mapper映射

/**

* 系统任务映射类

*/

@Mapper

public interface SysJobMapper extends BaseMapper<SysJob> {

}

服务类

/**

* <p>

* 系统任务服务类 实现任务的增删改查

* </p>

*/

public interface ISysJobService extends IService<SysJob> {

   //添加任务

   void saveSysJob(SysJob job);

   //更新任务

   void updateSysJob(SysJob job);

   //删除任务

   void delSysJob(SysJob job);

   //启动任务

   void restartSysJob(SysJob job);

   //停止任务

   void stopSysJob(SysJob job);

}

服务实现类

/**

* <p>

* 任务表 服务实现类

* </p>

*/

@Service

public class SysJobServiceImpl extends ServiceImpl<SysJobMapper, SysJob> implements ISysJobService {

   @Autowired

   BaseMapper baseMapper;

   @Autowired

   private Scheduler scheduler;

   //添加任务

   @Override

   public void saveSysJob(SysJob job){

       //根据状态是否加入定时任务

       if("1".equals(job.getJobStatus())){

           // 定时器添加

           this.addSysJob(job.getJobClass().trim(), job.getJobCron().trim(), job.getJobParams());

       }

       //保存数据库

       baseMapper.insert(job);

   }

   //更新任务

   @Override

   public void updateSysJob(SysJob job){

       //根据状态是否加入定时任务

       if("1".equals(job.getJobStatus())){

           // 定时器添加

           this.addSysJob(job.getJobClass().trim(), job.getJobCron().trim(), job.getJobParams());

       }else{

           //停止定时任务

           this.stopSysJob(job);

       }

       //保存数据库

       baseMapper.updateById(job);

   }

   //删除任务

   @Override

   public void delSysJob(SysJob job){

       this.stopSysJob(job);

       //数据库删除

       baseMapper.deleteById(job.getJobId());

   }

   //启动任务

   @Override

   public void restartSysJob(SysJob job){

        //先停止

        this.stopSysJob(job);

        //在添加任务

        this.addSysJob(job.getJobClass(),job.getJobCron(),job.getJobParams());

   }

   //停止任务

   @Override

   public void stopSysJob(SysJob job){

       try {

           String jobClassName = job.getJobClass();

           //删除触发器

           scheduler.pauseTrigger(TriggerKey.triggerKey(jobClassName));

           scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName));

           scheduler.deleteJob(JobKey.jobKey(jobClassName));

       } catch (Exception e) {

           e.printStackTrace();

       }

       //更新任务状态

       this.updateSysJob(job);

   }

   /**

    * 添加定时任务

    * */

   private void addSysJob(String jobClassName, String cronExpression, String parameter) {

       try {

           // 启动调度器

           scheduler.start();

           // 构建job信息

           JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName).usingJobData("parameter", parameter).build();

           // 表达式调度构建器(即任务执行的时间)

           CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);

           // 按新的cronExpression表达式构建一个新的trigger

           CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobClassName).withSchedule(scheduleBuilder).build();

           scheduler.scheduleJob(jobDetail, trigger);

       } catch(Exception e) {

           e.printStackTrace();

     }

   }

   private static Job getClass(String classname) throws Exception {

       Class<?> class1 = Class.forName(classname);

       return (Job) class1.newInstance();

   }

}

简单的任务

 

public class SysJob1 implements Job {

   @Override

   public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

       System.out.println("执行定时任务SysJob1..."+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

   }

}

public class SysJob2 implements Job {

   @Override

   public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

       System.out.println("执行定时任务SysJob2..."+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

   }

}

controller

@RestController

public class SysJobController {

   @Autowired

   ISysJobService sysJobService;

   //添加任务

   @GetMapping("/saveSysJob")

   void saveSysJob(){

       SysJob sysJob = new SysJob();

       sysJob.setJobClass("com.elite.springboot.task.SysJob2");

       sysJob.setJobCron("*/2 * * * * ?");

       sysJob.setJobParams("");

       sysJob.setJobDesc("2秒中一次定时执行任务sysjob2");

       sysJob.setJobStatus("1"); //正常

       sysJobService.saveSysJob(sysJob);

   }

   //更新任务

   @GetMapping("/updateSysJob")

   void updateSysJob(){

       SysJob sysJob = new SysJob();

       sysJob.setJobId(1);

       sysJob.setJobClass("com.elite.springboot.task.SysJob1");

       sysJob.setJobCron("*/3 * * * * ?");

       sysJob.setJobParams("");

       sysJob.setJobDesc("2秒中一次定时执行任务sysjob1");

       sysJob.setJobStatus("1"); //正常

       sysJobService.updateSysJob(sysJob);

   }

}

78c3342772df40daaa9d72df45830c7d.png


相关文章
|
22天前
|
缓存 Java 数据挖掘
SpringBoot整合定时任务技术Quartz
SpringBoot整合定时任务技术Quartz
62 0
|
22天前
|
SQL Java 调度
SpringBoot 整合 Quartz 定时任务框架
SpringBoot 整合 Quartz 定时任务框架
76 0
|
22天前
|
Java 调度
SpringBoot中实现定时任务(Quartz)(二)
SpringBoot中实现定时任务(Quartz)
30 0
SpringBoot中实现定时任务(Quartz)(二)
|
22天前
|
Java 调度 Spring
SpringBoot中实现定时任务(Quartz)(一)
SpringBoot中实现定时任务(Quartz)
45 0
SpringBoot中实现定时任务(Quartz)(一)
|
8月前
|
Java BI 调度
SpringBoot整合XXLJob
XXLJob是一个分布式任务调度平台,优点:开发迅速、学习简单、轻量级、易扩展。是大众点评员工xxl创建并维护,基于 GPL-3.0 开源,可放心商用,目前已经拥有庞大的使用群体。 简单来说,就是一个定时任务中间件,类似的产品有当当网开源的Elastic-Job。
1219 2
SpringBoot整合XXLJob
|
9月前
87.【SpringBoot-01】(三)
87.【SpringBoot-01】
35 0
|
10月前
|
存储 druid Java
SpringBoot3集成Quartz
Quartz由Java编写的功能丰富的开源作业调度框架,可以集成到几乎任何Java应用程序中,并且能够创建多个作业调度;
117 0
|
Java 调度 容器
Springboot整合Quartz
Springboot整合Quartz
10780 0
|
SQL 存储 Java
SpringBoot集成Quartz(定时任务)
SpringBoot集成Quartz(定时任务)
SpringBoot集成Quartz(定时任务)
|
XML Java 调度
SpringBoot 整合 QuartZ|学习笔记
快速学习 SpringBoot 整合 QuartZ
249 0

热门文章

最新文章