企业开发中,我们有时候会需要用到定时任务,spring已经为我们提供了相关的的功能,而且非常之简单,我们采用注解就能使用,下面就是一个简单的demo
先介绍一下开发环境:
- jdk版本是1.8
- springboot的版本是1.4.1
- 开发工具为 intellij idea
依赖包的话,其实springboot引入web包就好了,但是避免有人不知道,这里还是贴出来一份
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
包我们引入进来了,然后就是注解demo啦
/**
* 项目名:SpringBootDemo
* 创建人:贺小五
* 创建时间:16/12/30 上午11:34
* 类名:ScheduleDemo
* 类描述:
* spring定时器测试demo
*/
@EnableScheduling
@Component
public class ScheduleDemo {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* fixedRate多久执行一次,单位:毫秒
* initialDelay 延迟容器启动后执行,单位:毫秒
*/
@Scheduled(fixedRate = 10000,initialDelay = 2000)
public void scheduleTest1(){
System.out.println("10s执行一次--->"+sdf.format(new Date()));
}
/**
*
* fixedDelay在指定的时间执行一次,单位:毫秒
* 在创建后会执行一次,在第一次执行后,会每隔5S执行一次
*/
@Scheduled(fixedDelay = 5000)
public void scheduleTest2(){
System.out.println("5s执行一次--->"+sdf.format(new Date()));
}
/**
* cron表达式,下面表示,每隔1s执行一次,具体的可以自行定义
*/
@Scheduled(cron = "0/1 * * * * ? ")
public void scheduleTest3(){
System.out.println("5s执行一次--->"+sdf.format(new Date()));
}
}
执行boot的启动类,然后我们就可以观看打印结果了:
我们会发现,10S调用一次的,跟5S调用的会差2秒,是因为设定了第一次调用的延迟时间为2S
下面是一些注解的注释:
- @EnableScheduling 表示开启任务调度,用于类上的注解,该注解可以使用在boot的启动类,也可以使用在schedule配置类上
- @Scheduled 表示任务调用方法,用于方法上;
好了,上面就是一个简单的任务调度器,很简单的一个demo,具体怎么使用,个人根据业务去就好了,下面在介绍一下,@Scheduled注解内参数的定义:
@Scheduled注解下有一些参数,例如 fixedDelay,fixedRate...等,我这大概介绍下
- cron 表达式,可以指定某个时刻执行,具体的可以使用搜索引擎,这里就不详细介绍了
- zone 表示时区,默认是使用本地的时区,有时候可能需要国外的,可以使用 java.util.TimeZone时区类下的getTimeZone获取需要的时区
- fixedDelay 表示上次执行完毕到下次执行开始间隔数,单位:毫秒
- fixedDelayString 同上,只不过填写的是字符串,不是long类型
- fixedRate 表示上次执行完毕到下次执行开始的间隔数,单位:毫秒
- fixedRateString 同上,只不过填写的是字符串,不是long类型
- initialDelay 推迟第一次执行之前的毫秒数在fixedRate或fixedDelay的任务,单位:毫秒
- initialDelayString 同上,只不过填写的是字符串,不是long类型
到这,文章就结束了!
以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正
欢迎转载,请注明出处跟作者,谢谢!