Spring定时任务-创新互联
目录
为崇仁等地区用户提供了全套网页设计制作服务,及崇仁网站建设行业解决方案。主营业务为做网站、成都网站设计、崇仁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!一、创建项目
二、cron 表达式
2.1 符号讲解
三、使用定时任务
3.1 单线程实现
3.2 异步多线程实现
视频链接:学习中心|视频播放页 (boxuegu.com)https://xuexi.boxuegu.com/lesson/?id=1598
使用的idea版本:2022.3
一、创建项目在 pom.xml 文件中添加以下内容
org.springframework.boot spring-boot-starter-parent2.6.11 org.springframework.boot spring-boot-starter-web
二、cron 表达式在线Cron表达式生成器 (qqe2.com)https://cron.qqe2.com/
注意:国外是以周日为一周的第一天,所以 DayofWeek 中的 1-7 是指周日到周六
2.1 符号讲解通用符号:
- , 表示列出枚举值。例如:在 Minutes 域使用 5,20 表示在时间的分钟数为 5、20 时触发事件
- - 表示范围。例如在 Minutes 域使用 5-20 表示在时间为 5 到 20 时每分钟都触发事件
- * 表示匹配该域的任意值。假如在 Minutes 域使用 * 表示时间分钟数不做限制,每分钟都触事件
- / 表示起始时间开始触发,然后每隔固定时间触发一次。例如在 Minutes 域使用 5/20 表示时间的分钟数为 5 时触发一次,后隔 20 分钟即 25、45 再分别触发一次
专有符号:
- ?只能用在 DayofMonth 和 DayofWeek 两个域,由于 DayofMonth 和 DayofWeek 互斥,需对其一设置 ?
- L 表示最后,只能出现在 DayofMonth 和 DayofWeek 域。如果在 DayofWeek 域使用 5L,意味着在最后的一个星期四触发
- W 表示有效工作日 (周一到周五),只能出现在 DayofMonth 域,系统将在离指定日期的最近的有效工作日触发事件
- LW 这两个字符可以连用,表示在某个月的最后一个工作日
- # 用于确定每个月第几个星期几,只能出现在 DayofWeek 域。例如在 4#2,表示某月的第二个星期三(#号后面表示第几个,#号前面表示每个星期的第几天)
- C 只能用在 DayofMonth 和 DayofWeek 两个域,需要关联日历,如果没关联可以忽略
注意:
- 专有符号中除了 ? 外,在 Spring 定时任务中都不支持。
- 在启动类上添加注解 @EnableScheduling
@SpringBootApplication
@EnableScheduling // 开启对定时任务的支持
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
- 在任务方法上添加注解 @Scheduled,并设置定时规则
@Component
public class Task {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(cron = "*/6 * * * * *") //每6秒打印当前时间
public void getTime() {
String time = dateFormat.format(new Date());
System.out.println(time);
}
}
- 运行效果
默认是单线程的定时任务,如果任务持续时间较长,就会将和后续定时任务拖延,导致丢失任务。
- 在启动类上添加注解 @EnableScheduling、@EnableAsync
@SpringBootApplication
@EnableScheduling // 开启对定时任务的支持
@EnableAsync // 开启异步
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
- 在任务方法上添加注解 @Scheduled,并设置定时规则,然后再添加注解 @Async
@Component
public class Task {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Async // 异步
@Scheduled(cron = "*/6 * * * * *") //每6秒打印当前时间
public void getTime1() {
System.out.println(Thread.currentThread().getName() + "-" + dateFormat.format(new Date()));
}
@Async // 异步
@Scheduled(cron = "*/6 * * * * *") //每6秒打印当前时间
public void getTime2() {
System.out.println(Thread.currentThread().getName() + "-" + dateFormat.format(new Date()));
}
}
- 运行效果
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章题目:Spring定时任务-创新互联
网站地址:http://scyanting.com/article/coghsh.html