springboot Scheduled定時器 單線程多線程實現

springboot Scheduled定時器 單線程多線程實現

 

springboot單線程定時任務很簡單:

 1. 在項目啓動類上加@EnableScheduling註解

只有加了這個註解,才能掃描到@Scheduled註解, 定時器纔會起作用

@SpringBootApplication

@EnableScheduling//允許使用定時器

public class SpringbootScheduledApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootScheduledApplication.class, args);

}

}

2.定義一個類,加@competition,類中的方法加@Scheduled註解,定時器就定義好了

@competition,將該類加入springboot 的 been 中,是spring可以掃描到該類

@Scheduled(cron="*****?") cron表達式,指定任務在特定時間執行;

@Scheduled(fixedRate=1000 * 60 *60 )  從第一次開始執行算起, 1000 * 60 *60ms 後執行第二次;

@Scheduled(fixedDelay =1000 * 60 *60 )  從第一次執行完算起, 1000 * 60 *60ms 後執行第二次;

@Component

public class SchedualedTask {

private Log log = LogFactory.getLog(SchedualedTask.class);

  //定時器1.

// @Scheduled(fixedRate = 1000*60*60)

@Scheduled(fixedDelay = 1000*10)

public void task1(){

for (int i = 0; i < 100; i++) {

log.info("task1================================================================="+i);

}

}

  //定時器2.

@Scheduled(fixedDelay = 1000*10)

public void task2(){

for (int i = 0; i < 100; i++) {

log.info("task2================================================================="+i);

}

}

}

運行結果,定時器1和2,單線程串行執行

如何實現多線程呢

1.在上面代碼的基礎上,重新定義一個類,實現 SchedulingConfigurer,在重寫的方法中,調用定時器任務註冊器scheduledTaskRegistrar,setScheduler() 傳入一個新的線程池,自己可以定義線程池的size. 默認的線城池爲SingleThreadScheduledExecutor,所以爲單線程

@Configuration

//定時任務調用一個線程池中的線程。

public class ScheduleConfig implements SchedulingConfigurer {

@Override

public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {

//參數傳入一個size爲10的線程池

scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));

}

}

這樣重新啓動項目,我們的定時任務就會多線程並行執行了.

附上簡單案例的代碼 GitHub https://github.com/nokekang/springboot-scheduled

希望對初學者有所幫助

發佈了142 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章