本节内容是通过定时任务定时检查租约是否到期。SpringBoot内置了定时任务,具体实现如下。
在SpringBoot启动类上增加@EnableScheduling
注解,如下
@SpringBootApplication
@EnableScheduling
public class AdminWebApplication {
public static void main(String[] args) {
SpringApplication.run(AdminWebApplication.class, args);
}
}
编写定时逻辑
在web-admin模块下创建com.atguigu.lease.web.admin.schedule.ScheduledTasks
类,内容如下
@Component
public class ScheduledTasks {
@Autowired
private LeaseAgreementService leaseAgreementService;
@Scheduled(cron = "0 0 0 * * *")
public void checkLeaseStatus() {
LambdaUpdateWrapper<LeaseAgreement> updateWrapper = new LambdaUpdateWrapper<>();
Date now = new Date();
updateWrapper.le(LeaseAgreement::getLeaseEndDate, now);
updateWrapper.eq(LeaseAgreement::getStatus, LeaseStatus.SIGNED);
updateWrapper.in(LeaseAgreement::getStatus, LeaseStatus.SIGNED, LeaseStatus.WITHDRAWING);
leaseAgreementService.update(updateWrapper);
}
}
知识点:
SpringBoot中的cron表达式语法如下
┌───────────── second (0-59)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of the month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
│ │ │ │ │ ┌───────────── day of the week (0 - 7)
│ │ │ │ │ │ (0 or 7 is Sunday, or MON-SUN)
│ │ │ │ │ │
* * * * * *
六个星星就是每秒都在执行
package com.atguigu.lease.web.admin.schedule;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class ScheduleTasks {
@Scheduled(cron = "* * * * * *")
public void test(){
System.out.println(new Date());
}
}
三个星星是每天
package com.atguigu.lease.web.admin.schedule;
import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class ScheduleTasks {
@Autowired
private LeaseAgreementService service;
@Scheduled(cron = "0 0 0 * * *")
public void checkLeaseStatus(){
LambdaUpdateWrapper<LeaseAgreement> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.le(LeaseAgreement::getLeaseEndDate,new Date());
updateWrapper.in(LeaseAgreement::getStatus,LeaseStatus.SIGNED,LeaseStatus.WITHDRAWING);
updateWrapper.set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);
service.update(updateWrapper);
}
}
推荐阅读: