在開(kāi)發(fā)中很多地方需要用到定時(shí)任務(wù),如定時(shí)發(fā)送郵件,清理數(shù)據(jù)等漱竖,在Spring Boot 中已經(jīng)幫我們實(shí)現(xiàn)了抗斤,只需要增加相應(yīng)的注解即可囚企。
- pom配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 啟動(dòng)類增加@EnableScheduling注解,即可開(kāi)啟定時(shí)
@EnableScheduling
@SpringBootApplication
public class XiongxsScheduledApplication {
public static void main(String[] args) {
SpringApplication.run(XiongxsScheduledApplication.class, args);
}
}
- 編寫定時(shí)任務(wù)實(shí)現(xiàn)類
//任務(wù)1
@Component
public class ScheduledTask {
private int count = 0;
@Scheduled(cron = "*/6 * * * * ?")
private void proess() {
System.out.println("count = " + count++);
}
}
//任務(wù)2
@Component
public class Scheduled2Task {
private static final SimpleDateFormat dataFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 6000)
private void reportCurrentTime() {
System.out.println("現(xiàn)在時(shí)間" + dataFormat.format(new Date()));
}
}
運(yùn)行結(jié)果
count = 0
現(xiàn)在時(shí)間13:23:10
count = 1
現(xiàn)在時(shí)間13:23:16
count = 2
現(xiàn)在時(shí)間13:23:22
count = 3
現(xiàn)在時(shí)間13:23:28
count = 4
現(xiàn)在時(shí)間13:23:34
count = 5
現(xiàn)在時(shí)間13:23:40
- 注解參數(shù)說(shuō)明
@Component 泛指組建瑞眼,當(dāng)組建不好歸類的時(shí)候用這個(gè)注解標(biāo)注龙宏,把普通的POJO類實(shí)例化到Spring的IOC容器中。
@EnableScheduling 開(kāi)啟定時(shí)
@Scheduled 參數(shù)可以接受兩種定時(shí)的設(shè)置伤疙,一種是我們常用的cron="*/6 * * * * ?",一種是 fixedRate = 6000银酗,兩種都表示每隔六秒打印一下內(nèi)容辆影。
fixedRate 說(shuō)明
@Scheduled(fixedRate = 6000) :上一次開(kāi)始執(zhí)行時(shí)間點(diǎn)之后6秒再執(zhí)行
@Scheduled(fixedDelay = 6000) :上一次執(zhí)行完畢時(shí)間點(diǎn)之后6秒再執(zhí)行
@Scheduled(initialDelay=1000, fixedRate=6000) :第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每6秒執(zhí)行一次