jdk自带的定时任务
使用目的:
现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了。
很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清空你上月未用完流量,重置套餐流量,以及备忘录提醒、闹钟等功能。
Java 系统中主要有三种方式来实现定时任务:
Timer和TimerTask
ScheduledExecutorService
三方框架 Quartz
下面咱们用的是@Scheduled方式,jdk自带的也比较常用
1.启动类上加@EnableScheduling
2.创建定时任务类
@Component
public class TaskUtils {
@Autowired
private AccountMapper accountMapper;
// 添加定时任务
@Scheduled(cron = "0 36 17 ? * *") //cron每天下午 17:36 触发一次
public void doTask(){
//获取当前时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
String format = df.format(new Date());// new Date()为获取当前系统时间
//获取解封时间<=当前时间的数据
LambdaQueryWrapper<Account> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.apply((ObjectUtil.isNotNull(format)), "DATE_FORMAT(unseal_time, '%Y-%m-%d') <= {0}", format).eq(Account::getEnabled,false);
List<Account> accounts=accountMapper.selectList(queryWrapper);
List<Long> ids=new ArrayList<>();
for (Account account:accounts){
ids.add(account.getId());
}
//解封
UpdateWrapper<Account> wrapper = new UpdateWrapper<>();
wrapper.in("id",ids).set("enabled", true).set("disable_reason", null);
accountMapper.update(null, wrapper);
}
}
完成定时任务!
- 在现生成cron 表达式工具
- https://cron.qqe2.com/