定时任务

SpringBoot定时任务
一、概述
@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。注意需要启动项的application上加@EnableScheduling,@Scheduled需要加在方法上。
@Scheduled主要有以下几种配置执行时间的方式:
cron
fixedRate
fixedRateString
fixedDelay
fixedDelayString
initialDelay
initialDelayString
二、参数介绍

1、cron
这个corn表达式可以分为6个域或7个,由空格隔开。
当corn表达式里面为6个域时分别表示:秒 分 时 日 月 星期几
当corn表达式里面为7个域时分别表示:秒 分 时 日 月 星期几 年
@Scheduled(cron= “0/10 * * * * ")//每十秒执行一次
允许使用的通配符
"
” 表示所有值
“-” 表示区间
“?” 表示不指定值
“,” 表示指定多个值
“/” 表示增量触发,例如秒元素中的"0/15" 表示从0秒开始,每15秒触发(0,15,30,45)
cron支持占位符
@Scheduled(cron = “${cron}”)

2、fixedRate
fixedRate 从上次调用开始到下一次调用之间的固定时间(以毫秒为单位)
@Scheduled(fixedRate = 5000)//上次开始无论是否结束5秒钟之后会再次执行

3、fixedRateString
与 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
@Scheduled(fixedRateString = “5000”)//上次开始无论是否结束5秒钟之后会再次执行

4、fixedDelay
fixedDelay 从上次调用结束到下一次调用之间的固定时间(以毫秒为单位)
@Scheduled(fixedDelay = 5000)//上次调用结束后5秒再执行

5、fixedDelayString
fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符
@Scheduled(fixedDelayString = “${time.fixedDelay}”)

6、initialDelay
第一次执行 fixedRate 或者 fixedDelay 任务之前要延迟的毫秒数,不支持cron
@Scheduled(initialDelay=100010, fixedRate=5000)//延迟10秒后执行第一次,之后按fixedRate的规则每5秒执行一次
@Scheduled(initialDelay=1000
10, fixedDelay=5000)//延迟10秒后执行第一次,之后按fixedDelay的规则每5秒执行一次

7、initialDelayString
与 initialDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
@Scheduled(initialDelay=“1000”, fixedRate=5000)//延迟1秒后执行第一次,之后按fixedRate的规则每5秒执行一次
@Scheduled(initialDelay=“1000”, fixedDelay=5000)//延迟1秒后执行第一次,之后按fixedDelay的规则每5秒执行一次

三、使用@Scheduled注意事项
1、spring的注解@Scheduled 需要写在实现方法上;
2、定时器的任务方法不能有返回值;
3、如果该方法需要与应用程序上下文的其他对象进行交互,通常是通过依赖注入来实现;
4、实现类上要有组件的注解@Component;
5、定时器默认为单线程;
6、使用cron表达式的方法,在项目首次启动后不会直接运行,而是等到执行周期才会执行,而fixedDelay、fixedRate方式的定时器方法,在项目启动成功后会马上开始执行一次,再按照时间周期执行;

四、代码实例

复制代码
@Component
public class MyScheduled {

@Scheduled(initialDelay =1000 * 3,fixedDelay=1000 * 10)
public  void testScheduledFixedDelay() {
    System.out.println("MyScheduled[testScheduledFixedDelay] run:"+LocalDateTime.now());
}

@Scheduled(fixedRate=1000 * 10)
public  void testScheduledFixedRate() {
    System.out.println("MyScheduled[testScheduledFixedRate] run:"+LocalDateTime.now());
}

@Scheduled(cron= "0/10 * * * * *")
public  void testScheduledCron() {
    System.out.println("MyScheduled[testScheduledCron] run:" +LocalDateTime.now() );
}

}
复制代码

复制代码
@SpringBootApplication
@EnableScheduling
public class SpringbootdemoApplication {

public static void main(String[] args) {
    SpringApplication.run(SpringbootdemoApplication.class, args);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值