Quartz框架之简单认识认识我吧

tech2025-05-19  11

Quartz

Quartz简介

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.2。

组件说明: 1.Job 用户自定义的任务. 2.JobDetail 将用户封装之后的结果. 3.调度器 负责任务的协调服务. 4.触发器 当接收调度器的指令后,开启线程执行任务.

jar包

<!--添加Quartz的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>

配置类

@Configuration public class OrderQuartzConfig { //定义任务详情 @Bean public JobDetail orderjobDetail() { //指定job的名称和持久化保存任务 return JobBuilder .newJob(OrderQuartz.class) //引入自定义的任务 .withIdentity("orderQuartz")//指定任务名称 .storeDurably() .build(); } //定义触发器 @Bean public Trigger orderTrigger() { /*SimpleScheduleBuilder builder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInMinutes(1) //定义时间周期 .repeatForever();*/ //通过调度器,指定程序多久执行一次. //0 0/1 * * * ? 时间表达式 规定任务多久执行一次 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/1 * * * ?"); return TriggerBuilder .newTrigger() .forJob(orderjobDetail()) .withIdentity("orderQuartz") .withSchedule(scheduleBuilder).build(); } }

 执行定时任务

//准备订单定时任务 @Component public class OrderQuartz extends QuartzJobBean{ @Autowired private OrderMapper orderMapper; /** * 当规定的执行时间一到,触发器就会开启线程,执行指定的任务. * 业务需求: * 要求将超时订单关闭. 要求30分钟 status 由1改为6 * 如何定义超时: * now() - created > 30分钟 订单超时 * created < now -30 * Sql: * update tb_order set status = 6,updated = #{date} * where created < (now -30) and status = 1; * */ @Override @Transactional protected void executeInternal(JobExecutionContext context) throws JobExecutionException { //对时间进行计算 Calendar calendar = Calendar.getInstance(); //实例化对象 获取当前时间 calendar.add(Calendar.MINUTE, -30); Date timeOut = calendar.getTime(); Order entity = new Order(); entity.setStatus(6).setUpdated(new Date()); UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("status", 1) .lt("created",timeOut); orderMapper.update(entity, updateWrapper); System.out.println("定时任务执行成功!!!!"); } }

 

最新回复(0)