spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù)
在 Spring Boot 中,可以使用 @Scheduled 注解和 TaskScheduler 接口來實(shí)現(xiàn)定時(shí)任務(wù)。以下是關(guān)于如何在 Spring Boot 中創(chuàng)建定時(shí)任務(wù)的詳細(xì)說明:
- 添加依賴
在 pom.xml 文件中添加 spring-boot-starter 依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>- 啟用定時(shí)任務(wù)
在 Spring Boot 主類上添加 @EnableScheduling 注解,以啟用定時(shí)任務(wù)支持:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}- 創(chuàng)建定時(shí)任務(wù)
使用 @Scheduled 注解創(chuàng)建定時(shí)任務(wù)。以下是一個(gè)簡(jiǎn)單的定時(shí)任務(wù)示例:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
System.out.println("Fixed rate task executed at " + LocalDateTime.now());
}
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask() {
System.out.println("Fixed delay task executed at " + LocalDateTime.now());
}
@Scheduled(cron = "0 * * * * ?")
public void cronTask() {
System.out.println("Cron task executed at " + LocalDateTime.now());
}
}在這個(gè)示例中,我們創(chuàng)建了三個(gè)定時(shí)任務(wù):
fixedRateTask:使用fixedRate屬性,每隔 5000 毫秒(5 秒)執(zhí)行一次。fixedDelayTask:使用fixedDelay屬性,在上一次任務(wù)完成后等待 5000 毫秒(5 秒)再執(zhí)行。cronTask:使用cron屬性,根據(jù) Cron 表達(dá)式執(zhí)行任務(wù)。在這個(gè)例子中,任務(wù)將在每分鐘的整數(shù)秒執(zhí)行。
- 使用
TaskScheduler接口
除了使用 @Scheduled 注解,你還可以使用 TaskScheduler 接口來創(chuàng)建定時(shí)任務(wù)。以下是一個(gè)使用 TaskScheduler 的示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.time.LocalDateTime;
@Configuration
public class SchedulerConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(5);
return taskScheduler;
}
@Bean
public Runnable exampleTask() {
return () -> System.out.println("Task executed at " + LocalDateTime.now());
}
@Bean
public ScheduledTaskRegistrar scheduledTaskRegistrar(TaskScheduler taskScheduler, Runnable exampleTask) {
ScheduledTaskRegistrar taskRegistrar = new ScheduledTaskRegistrar();
taskRegistrar.setTaskScheduler(taskScheduler);
taskRegistrar.addFixedRateTask(exampleTask, 5000);
return taskRegistrar;
}
}在這個(gè)示例中,我們創(chuàng)建了一個(gè) TaskScheduler Bean,配置了一個(gè)線程池大小為 5 的 ThreadPoolTaskScheduler。然后,我們創(chuàng)建了一個(gè)簡(jiǎn)單的 Runnable 任務(wù),并使用 ScheduledTaskRegistrar 將任務(wù)注冊(cè)到 TaskScheduler。這個(gè)任務(wù)將以固定的速率(每隔 5000 毫秒)執(zhí)行。
這就是在 Spring Boot 中創(chuàng)建定時(shí)任務(wù)的詳細(xì)說明。你可以根據(jù)自己的需求調(diào)整任務(wù)的執(zhí)行頻率和邏輯。
到此這篇關(guān)于spring boot 使用 @Scheduled 注解和 TaskScheduler 接口實(shí)現(xiàn)定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)spring boot 定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單的客戶信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的客戶信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
Java中的動(dòng)態(tài)數(shù)組和棧Vector Stack使用區(qū)別介紹
這篇文章主要為大家介紹了Java中的動(dòng)態(tài)數(shù)組和棧Vector Stack使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Spring Cloud實(shí)現(xiàn)提供API給客戶端的方法詳解
這篇文章主要給大家介紹了關(guān)于Spring Cloud實(shí)現(xiàn)提供API給客戶端的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Springboot處理跨域的實(shí)現(xiàn)方式(附Demo)
這篇文章主要介紹了Springboot處理跨域的實(shí)現(xiàn)方式(附Demo),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
SpringBoot之Refresh流程的簡(jiǎn)單說明
這篇文章主要介紹了SpringBoot之Refresh流程的簡(jiǎn)單說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

