SpringBoot中的定时任务

本文讨论了Java中实现定时任务的不同方法,如内置的Timer类、Quartz和Spring框架的Task组件。重点介绍了Cron表达式在定时任务中的应用,并展示了如何在SpringBoot中使用@Scheduled注解轻松配置定时任务。
摘要由CSDN通过智能技术生成

定时任务的实现方式

  • Java自带的java.util.Timer类,这个类允许调度一个java.util.TimerTask任务,使用这种方式可以让你的程序按照某一个频率执行,但不能在指定时间运行,一般用的比较少。
  • 使用Quartz,这是一个功能比较强大的调度器,可以让你的程序在指定的时间执行,也可以按照某一个频率执行,但是配置起来比较复杂。
  • Spring3.0以后自带的task,可以将其视为一个轻量级的Quartz,使用起来比Quartz简单许多。

Cron表达式

在使用定时任务时,必须掌握Cron表达式,Cron表达式至少有6个(也可以是7个)由空格分隔的时间元素组成.第7个元素可选的,从左至右,这些元素的定义如下表:
在这里插入图片描述

Cron表达式的每一个字段,都可以显式规定一个值(如49),一个范围(如1-6),一个列表(如1,3,5)或者一个通配符(如*)表示每一个值.有几个特殊的字符,具体说明一下:

● -: 中划线,表示一个范围
● ,:使用逗号间隔的数据,表示一个列表
● *:表示每一个值,它可以用于所有的字段,例如在小时字段表示每小时
● ?:该字符仅用于”月份的哪一天”字段和”星期几”字段,表示不指定值,当这两个字段其中之一被指定值之后,为了避免冲突,需要将另外一个字段的值设置为”?”
● /:通常表示为x/y,x为起始值,y表示值的增量,例如,在分钟字段中使用”0/15”,表示0,15,30,45
● L:表示”Last”,仅在”月份的哪一天”字段和”星期几”字段中使用,但是在这两个字段表示的含义不同,L在”月份的哪一天”字段中,表示一个月的最后一天. L在”星期几”字段中,表示一个月的最后一个星期.你可以用一个数字和L连用,表示一个月最后一个星期的星期几.比如表达式”0 0 0 ? * 2L”,”2L”表示的是每个月的最后一个星期的星期一触发
● #:只能用于”星期几”字段,表示这个月的第几个周几,例如”6#3”指的是这个月第3个星期五(6指星期五,3指第3个) : 星期天到星期六: 1-7
cron表达式示例:
在这里插入图片描述

Task

Quartz将其中的对象划分粒度过细,导致开发的时候有点繁琐,spring针对上述规则进行了简化,开发了自己的任务管理组件——Task
spring根据定时任务的特征,将定时任务的开发简化到了极致。怎么说呢?要做定时任务总要告诉容器有这功能吧,然后定时执行什么任务直接告诉对应的bean什么时间执行就行了,就这么简单,一起来看怎么做。

  1. 开启定时任务功能,在引导类上开启定时任务功能的开关,使用注解@EnableScheduling
@SpringBootApplication
//开启定时任务功能
@EnableScheduling
public class SpringbootTaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootTaskApplication.class, args);
    }
}
  1. 定义Bean,在对应要定时执行的操作上方,使用注解@Scheduled定义执行的时间,执行时间的描述方式还是cron表达式
@Component
public class MyTask {
	//需要执行的任务   每十秒钟执行一次
	//@Scheduled 定义定时任务的信息
	//  属性 cron表达式:定义执行的时间
	@Scheduled(cron="0/10 * * * * ?")
	public void tesk1(){
		System.out.println("tesk1.....["+new Date()+"]");
	}
}

定时任务相关配置:

spring:
  task:
    scheduling:
      pool:
        size: 1  # 任务调度线程池大小 默认 1
      # 调度线程名称前缀 默认 scheduling-
      thread-name-prefix: suke_
      shutdown:
        #线程池关闭时等待所有任务完成
        await-termination: false
        # 调度线程关闭前最大等待时间,确保最后一定关闭
        await-termination-period: 10s
  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值