Spring定时任务-创新互联

目录

为崇仁等地区用户提供了全套网页设计制作服务,及崇仁网站建设行业解决方案。主营业务为做网站、成都网站设计、崇仁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

一、创建项目

二、cron 表达式

2.1 符号讲解

三、使用定时任务

3.1 单线程实现

3.2 异步多线程实现


视频链接:学习中心|视频播放页 (boxuegu.com)https://xuexi.boxuegu.com/lesson/?id=1598

使用的idea版本:2022.3

一、创建项目

在 pom.xml 文件中添加以下内容

org.springframework.bootspring-boot-starter-parent2.6.11org.springframework.bootspring-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 定时任务中都不支持。

三、使用定时任务 3.1 单线程实现
  • 在启动类上添加注解 @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);
    }
}
  • 运行效果

3.2 异步多线程实现

默认是单线程的定时任务,如果任务持续时间较长,就会将和后续定时任务拖延,导致丢失任务。

  • 在启动类上添加注解 @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