SpringBoot如何整合定時任務調度
所有的系統開發裡面定時調度絕對是一個核心的話題,對於定時調用的實現在實際開發之中可以使用:TimerTask,Quartz,SpringTask配置,實際上這裡面最簡單的配置就是Spring自己所提供的Task處理。
如果要想實現定時調度,只需要配置一個定時調度的組件類即可:
import java.time.Instant;
@Component
public class MyScheduler {
@Scheduled(fixedRate = 2000) //採用間隔調用
public void runJobA() {
}
@Scheduled(cron = "* * * * * ?")
public void runJobB() {
}
}
如果現在要想執行此任務,那麼還需要有一個基本的前提:你的程序啟動類上一定要啟用調度處理。
package com.gwolf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //啟動SpringBoot程序,而後自帶子包掃描。
@EnableTransactionManagement
@EnableScheduling
public class StartSpringBootMain {
public static void main(String[] args) {
SpringApplication.run(StartSpringBootMain.class, args);
}
}
啟動程序運行主類,查看程序的執行結果:
這個時候所實現的任務調用只是串列任務調度,也就是說所有的任務時候一個一個的執行的處理方式,那麼如果現在有一個任務所花費的時間特別的暢,則其他的任務都會擠壓,實際開發之中很明顯這種處理是不可能存在。
如果要想啟動並行的調度處理,則一定要準備出一個線程調度池,進行一個線程調度的配置類:
@Configuration
public class SchedulerConfig implements SchedulingConfigurer{
//開啟一個線程調度池
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(100));
}
}
在以後所編寫的定時任務調用的時候一定要準備好一個線程池,這樣才可以讓多個任務並行執行。
※SpringBoot配置基礎攔截器
※在springboot中配置aop攔截器
TAG:Adolph談JAVA高端 |