成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot實(shí)戰(zhàn):SpringBoot三種定時(shí)任務(wù)實(shí)現(xiàn)方式

開發(fā) 后端
本文將詳細(xì)介紹三種常用的Spring Boot定時(shí)任務(wù)實(shí)現(xiàn)方式,并提供相應(yīng)的例子代碼。

在Spring Boot項(xiàng)目中,實(shí)現(xiàn)定時(shí)任務(wù)是常見需求。Spring Boot提供了多種靈活的方式來(lái)實(shí)現(xiàn)定時(shí)任務(wù),包括基于注解的方式、基于接口的方式以及使用外部任務(wù)調(diào)度工具等。本文將詳細(xì)介紹三種常用的Spring Boot定時(shí)任務(wù)實(shí)現(xiàn)方式,并提供相應(yīng)的例子代碼。

1. 基于注解的方式(@Scheduled)

使用@Scheduled注解是實(shí)現(xiàn)Spring Boot定時(shí)任務(wù)最簡(jiǎn)單直接的方式。首先,你需要在Spring Boot的啟動(dòng)類或者配置類上添加@EnableScheduling注解來(lái)啟用定時(shí)任務(wù)支持。然后,在需要定時(shí)執(zhí)行的方法上添加@Scheduled注解,并指定cron表達(dá)式或固定間隔。

例子代碼:

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
public class ScheduledTasks {

    @Scheduled(cron = "0/5 * * * * *") // 每5秒執(zhí)行一次
    public void runEveryFiveSeconds() {
        System.out.println("任務(wù)執(zhí)行: " + System.currentTimeMillis());
    }

    @Scheduled(fixedRate = 5000) // 每5秒執(zhí)行一次,與上一個(gè)任務(wù)不同,fixedRate是基于上一次開始時(shí)間計(jì)算
    public void runFixedRateTask() {
        System.out.println("固定頻率任務(wù)執(zhí)行: " + System.currentTimeMillis());
    }
}

在上面的代碼中,@Scheduled注解分別使用了cron表達(dá)式和固定頻率(fixedRate)兩種方式來(lái)定義定時(shí)任務(wù)。需要注意的是,@EnableScheduling注解只需要在Spring Boot的啟動(dòng)類或配置類上添加一次。

2. 基于接口的方式(SchedulingConfigurer)

如果你需要更靈活地控制定時(shí)任務(wù),比如從數(shù)據(jù)庫(kù)中讀取任務(wù)的執(zhí)行周期,那么可以使用SchedulingConfigurer接口。通過(guò)實(shí)現(xiàn)這個(gè)接口,你可以自定義任務(wù)的注冊(cè)邏輯,包括任務(wù)的執(zhí)行周期等。

例子代碼:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

@Configuration
@EnableScheduling
public class DynamicScheduleTask implements SchedulingConfigurer {

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(10);
        scheduler.setThreadNamePrefix("taskScheduler-");
        return scheduler;
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(
                () -> System.out.println("動(dòng)態(tài)定時(shí)任務(wù)執(zhí)行: " + System.currentTimeMillis()),
                context -> {
                    // 這里可以從數(shù)據(jù)庫(kù)讀取cron表達(dá)式
                    String cron = "0/10 * * * * *"; // 示例cron表達(dá)式,每10秒執(zhí)行一次
                    CronTrigger trigger = new CronTrigger(cron);
                    return trigger.nextExecutionTime(context);
                }
        );
    }
}

在上面的代碼中,通過(guò)實(shí)現(xiàn)SchedulingConfigurer接口,我們自定義了任務(wù)的注冊(cè)邏輯,包括從外部數(shù)據(jù)源(例如數(shù)據(jù)庫(kù))讀取cron表達(dá)式,并據(jù)此設(shè)置任務(wù)的執(zhí)行周期。

3. 使用Quartz調(diào)度器

Quartz是一個(gè)功能強(qiáng)大的開源作業(yè)調(diào)度庫(kù),它提供了比Spring的@Scheduled注解更為復(fù)雜的調(diào)度選項(xiàng),如作業(yè)持久化、集群支持和事務(wù)性作業(yè)。在Spring Boot中集成Quartz,你需要添加Quartz的依賴,并配置JobDetail、Trigger和Scheduler bean。

例子配置

首先,在pom.xml中添加Quartz依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

然后,定義作業(yè)類、配置Quartz調(diào)度器,并通過(guò)Java配置或XML配置來(lái)注冊(cè)JobDetail和Trigger。

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyQuartzJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Quartz任務(wù)執(zhí)行: " + System.currentTimeMillis());
    }
}

配置類省略,因?yàn)镼uartz的詳細(xì)配置相對(duì)復(fù)雜,包括JobDetail、Trigger和Scheduler bean的定義,通常需要根據(jù)具體需求來(lái)配置。不過(guò),Spring Boot的spring-boot-starter-quartz已經(jīng)為我們做了很多簡(jiǎn)化工作,包括自動(dòng)配置Scheduler等。

總結(jié)

在Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)有多種方式,包括基于注解的方式、基于接口的方式以及使用外部任務(wù)調(diào)度工具如Quartz等。選擇哪種方式取決于你的具體需求,比如任務(wù)的復(fù)雜度、是否需要?jiǎng)討B(tài)調(diào)整任務(wù)執(zhí)行周期等。在實(shí)際項(xiàng)目中,可以根據(jù)項(xiàng)目特點(diǎn)和個(gè)人偏好選擇最適合的實(shí)現(xiàn)方式。

責(zé)任編輯:趙寧寧 來(lái)源: 后端Q
相關(guān)推薦

2021-06-30 07:19:34

SpringBoot定時(shí)任務(wù)

2025-01-08 09:55:37

Spring接口數(shù)據(jù)庫(kù)

2020-12-21 07:31:23

實(shí)現(xiàn)單機(jī)JDK

2024-12-27 08:24:55

2019-02-20 15:52:50

技術(shù)開發(fā)代碼

2025-02-24 16:00:00

SpringBoot定時(shí)任務(wù)開發(fā)

2024-07-08 09:03:31

2024-05-31 13:07:29

.NET Core定時(shí)任務(wù)編程

2024-02-28 09:54:07

線程池配置

2021-03-09 14:12:07

Java 框架定時(shí)

2024-07-31 14:03:00

Spring定時(shí)任務(wù)管理

2023-10-31 12:42:00

Spring動(dòng)態(tài)增刪啟停

2019-12-25 15:10:00

MySQL事件數(shù)據(jù)庫(kù)

2024-05-28 08:17:54

2024-02-26 11:12:33

定時(shí)任務(wù)線程

2021-11-22 12:35:40

Python命令定時(shí)任務(wù)

2024-01-31 08:38:57

Python定時(shí)任務(wù)函數(shù)

2021-08-05 07:28:25

Java實(shí)現(xiàn)方式

2017-08-16 16:41:04

JavaSpringBoot定時(shí)任務(wù)

2024-01-22 08:53:00

策略任務(wù)RocketMQ
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品v日韩精品 | 中文字幕欧美日韩 | 欧美精品乱码久久久久久按摩 | 91社区在线高清 | 欧美精品一区二区三区在线播放 | 久久人体 | 欧美成人免费在线 | www.久草 | 天堂中文在线观看 | 天堂一区| 日韩精品在线看 | 亚洲欧美激情精品一区二区 | 亚洲 自拍 另类 欧美 丝袜 | 精品中文字幕视频 | 91天堂网 | 国产精品视频免费观看 | 亚洲免费人成在线视频观看 | 国产精品免费一区二区三区四区 | 国产免费拔擦拔擦8x高清 | yeyeav| 成人欧美一区二区三区黑人孕妇 | 韩日视频在线观看 | 亚洲国产精品一区二区三区 | 亚洲国产精品一区二区三区 | 男女羞羞视频免费看 | 日韩在线一区视频 | 欧美一级二级视频 | 国产精品久久久久久久久久久新郎 | 精品视频在线观看 | 拍真实国产伦偷精品 | 羞羞视频一区二区 | 中文字幕av在线播放 | 久久精品欧美电影 | 日本在线网址 | h视频在线播放 | 国产欧美日韩在线播放 | 欧美高清视频在线观看 | 国产91丝袜在线播放 | 久久综合久久久 | 精品国产一区二区三区日日嗨 | 99精品一区二区 |