springboot中定時任務(@Scheduled)的用法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM