springboot中定時任務(@Scheduled)的用法
用於控制任務在某個指定時間執行,或者每隔一段時間執行。一般用在業務層的業務類中
使用前提
需要在啟動類添加注解@EnableScheduling,開啟定時任務功能,默認是關閉的。
用到注解@Scheduled的方法的類需將此類標記為Spring容器中的一個Bean如業務類添加注解@Service
注解@Scheduled的參數用法
1.@Scheduled(cron = "* * * * * ?")
秒 分 時 日 月 周 年
cron表達式中各個時間元素用空格分隔,至少有6個時間元素(第7個時間元素為年份可寫可不寫)
cron表達式支持占位符的寫法,可以在配置文件或配置服務器中動態調整:
@Scheduled(cron = "${cron}")
常用的通配符說明:
"*" 表示所有值
"-" 表示區間
"?" 表示不指定值
"," 表示指定多個值
"/" 表示增量觸發,例如秒元素中的"0/15" 表示從0秒開始,每15秒觸發(0,15,30,45)
2.@Scheduled(fixedDelay = 50000, initialDelay = 1000)
參數說明:
fixedDelay = 5*1000 :上一次執行完畢時間點后5秒再次執行
fixedDelayString = "${service.fixed-delay:10000}" : 與fixedDelay作用相同,但表示形式為字符串並支持占位符,可以在配置文件或配置服務器中動態調整,可以設置默認值。
fixedRate = 5*1000 :上一次執行開始時間點后5秒再次執行
initialDelay = 10*1000 :第一次延遲10秒后再執行
上面兩個同理可以加String后綴用字符串或者占位符表示參數。
具體實例
啟動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @author Administrator
*/
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
業務類
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author Administrator
*/
@Slf4j
@Service
public class TestSchedulingService {
@Scheduled(cron = "0/10 * * * * ?")
public void testTask1() {
log.info("開始執行測試任務1-每隔10秒運行一次,當前時間為:{}",new Date());
}
@Scheduled(fixedDelay = 5*1000, initialDelay = 10*1000)
public void testTask2() {
log.info("開始執行測試任務2-延遲10秒后每隔5秒運行一次,當前時間為:{}",new Date());
}
@Scheduled(fixedDelayString = "${service.fixed-delay:50000}",initialDelayString = "${service.initial-delay:50000}")
public void testTask3() {
log.info("開始執行測試任務3-每隔1秒運行一次,當前時間為:{}",new Date());
}
}
配置文件(yml文件,也可以配置在apollo或者nacos服務器中)
service.fixed-delay: 1000
service.initial-delay: 10000