SpringBoot使用@Scheduled注解实现定时任务
- 在项目启动类上加 @EnableScheduling 注解,用于开启定时任务,可以理解为整个项目定时任务的总开关。
@SpringBootApplication
@EnableScheduling
public class ApplicationEnter {
public static void main(String [] args){
SpringApplication.run(ApplicationEnter.class, args);
System.out.println("应用启动成功");
}
}
- 创建一个专门设置定时任务的类
/**
* 定时任务Demo
*/
@Component
public class Task {
@Scheduled(cron = "${taskCron.bisAutoCreateIssue}")
public void execute(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式
System.out.println("定时任务1开始执行。。。 "+ df.format(new Date()));
Thread.sleep(1000 * 3); //等待3秒
}
@Scheduled(cron = "0/5 * * * * ?")
public void execute2(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式
System.out.println("定时任务2开始执行。。。" + df.format(new Date()));
}
}
可以把执行定时任务的规则的cron表达式写到 application.yml 配置文件中,用${}获取,配置文件cron表达式内容如下:
taskCron:
bisAutoCreateIssue: 0/5 * * * * * #每5秒执行一次
启动项目测试输出结果:
如果2个定时任务的数据互不相关,可以尝试使用异步多线程的方式来执行定时任务。
因为@Scheduled默认为单线程,开启多个任务时,需要一个定时任务执行完后,再执行下一个,任务的执行时机会受上一个任务执行时间的影响。开启多线程定时任务方法如下:
- 在定时任务的类上加 @EnableAsync 注解
- 在需要异步执行的定时任务上加上 @Async 注解
/**
* 定时任务Demo
*/
@Component
@EnableAsync //开启多线程
public class Task {
@Async //异步执行
@Scheduled(cron = "${taskCron.bisAutoCreateIssue}")
public void execute() throws InterruptedException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式
System.out.println("定时任务1开始执行。。。"+ df.format(new Date()));
Thread.sleep(1000 * 3);
}
@Async //异步执行
@Scheduled(cron = "0/5 * * * * ?")
public void execute2(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式
System.out.println("定时任务2开始执行。。。" + df.format(new Date()));
}
}
使用异步之后的执行效果:
摘抄自网络,便于检索查找。
分类:
old
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2021-02-04 都1202年了奉劝那些还在用centos6的gs,赶紧切ubuntu-Centos6 升级 gcc 惨痛教训
2017-02-04 [No0000B7]If else 与 三元表达式? : 效率对比