目录
应用场景:只要是需要定时处理的都可以用spring task
简介
应用场景:只要是需要定时处理的都可以用spring task
通过cron表达式进行定义任务触发时间
ps:cron表达式中 日和周这两个域通常只能写一个,另一个用“?”表示
这个可以不用自己手写,cron表达式在线生成器:在线Cron表达式生成器
Spring Task使用步骤:
导入maven坐标
spring-boot-starter中包含了spring-context:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
在启动类上添加注解
eg:需要的注解在第四行
@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@EnableCaching//开启缓存注解功能
@EnableScheduling//开启任务调度
@Slf4j
public class SkyApplication {
public static void main(String[] args) {
SpringApplication.run(SkyApplication.class, args);
log.info("server started");
}
}
自定义定时任务类
/**
* 自定义任务类
*/
@Slf4j
@Component
public class MyTask {
/**
* 定时任务 每隔5秒触发一次
*/
@Scheduled(cron = "0/5 * * * * ?")
public void execute_task(){
log.info("定时任务开始执行:{}",new Date());
}
}
测试
启动后可以看到每定时任务隔五秒执行一次
应用(每隔一分钟检查一次,查出超过15分钟未付款的订单):
/**
* 处理超时订单的方法
*/
@Scheduled(cron = "0 * * * * ? ")//每隔一分钟检查一次
public void processTimeoutOrder(){
log.info("定时处理超时订单:{}", LocalDateTime.now());
LocalDateTime time=LocalDateTime.now().plusMinutes(-15);
//查出所等待付款并且超时的订单
//select * from orders where status=? and order_time<(现在的时间-15分钟)
List<Orders> ordersList=orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT,time);
if(ordersList!=null && ordersList.size()>0){
for(Orders orders:ordersList){
orders.setStatus(Orders.CANCELLED);
orders.setCancelReason("订单超时,自动取消");
orders.setCancelTime(LocalDateTime.now());
orderMapper.update(orders);
}
}
}
《苍穹外卖》项目学习笔记