最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot最新定時(shí)任務(wù)的7種實(shí)現(xiàn)方案

 更新時(shí)間:2024年12月14日 10:07:07   作者:JaggerVip  
在現(xiàn)代應(yīng)用中,定時(shí)任務(wù)是一個(gè)非常常見(jiàn)的需求,本文將通過(guò)7種方式講解如何在SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù),包括使用@Scheduled注解、ScheduledExecutorService、Quartz、SpringTaskScheduler、Redis、XXL-JOB和Elastic-Job等,各有優(yōu)缺點(diǎn),選擇時(shí)應(yīng)根據(jù)實(shí)際需求進(jìn)行考慮

在現(xiàn)代應(yīng)用中,定時(shí)任務(wù)是一個(gè)非常常見(jiàn)的需求,例如定時(shí)清理過(guò)期數(shù)據(jù)、定時(shí)生成報(bào)表等。本文將通過(guò) 7 種方式講解如何在 SpringBoot 中實(shí)現(xiàn)定時(shí)任務(wù),幫助開(kāi)發(fā)者根據(jù)場(chǎng)景選擇適合的解決方案。

1. 使用 @Scheduled 注解實(shí)現(xiàn)簡(jiǎn)單定時(shí)任務(wù)

Spring 提供了 @Scheduled 注解,可以快速實(shí)現(xiàn)定時(shí)任務(wù)。只需在啟動(dòng)類或配置類上加上 @EnableScheduling 注解。

示例代碼

@EnableScheduling
@SpringBootApplication
public class ScheduledTaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(ScheduledTaskApplication.class, args);
    }

    @Component
    public static class SimpleTask {

        @Scheduled(cron = "0 0/1 * * * ?") // 每分鐘執(zhí)行一次
        public void execute() {
            System.out.println("簡(jiǎn)單定時(shí)任務(wù)執(zhí)行:" + LocalDateTime.now());
        }
    }
}

優(yōu)勢(shì)

  • 簡(jiǎn)單易用
  • 無(wú)需額外依賴

局限性

  • 不支持分布式任務(wù)調(diào)度

2. 使用 ScheduledExecutorService 實(shí)現(xiàn)定時(shí)任務(wù)

ScheduledExecutorService 是 Java 自帶的定時(shí)任務(wù)工具,可以實(shí)現(xiàn)簡(jiǎn)單的并發(fā)任務(wù)。

示例代碼

@Component
public class ExecutorServiceTask {

    private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);

    @PostConstruct
    public void init() {
        executorService.scheduleAtFixedRate(() -> {
            System.out.println("ExecutorService 任務(wù)執(zhí)行:" + LocalDateTime.now());
        }, 0, 1, TimeUnit.MINUTES);
    }
}

優(yōu)勢(shì)

  • 支持并發(fā)執(zhí)行

局限性

  • 不支持動(dòng)態(tài)配置任務(wù)

3. 使用 Quartz 實(shí)現(xiàn)復(fù)雜調(diào)度任務(wù)

Quartz 是一個(gè)功能強(qiáng)大的任務(wù)調(diào)度框架,支持復(fù)雜的調(diào)度任務(wù)。

示例代碼

依賴

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

配置與任務(wù)

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger trigger(JobDetail jobDetail) {
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail)
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?"))
                .build();
    }

    public static class SampleJob implements Job {
        @Override
        public void execute(JobExecutionContext context) {
            System.out.println("Quartz 任務(wù)執(zhí)行:" + LocalDateTime.now());
        }
    }
}

優(yōu)勢(shì)

  • 支持分布式任務(wù)
  • 功能強(qiáng)大

局限性

  • 學(xué)習(xí)曲線較陡
  • 配置復(fù)雜

4. 使用 Spring TaskScheduler 實(shí)現(xiàn)定時(shí)任務(wù)

Spring 提供了 TaskScheduler 接口,支持動(dòng)態(tài)任務(wù)。

示例代碼

@Component
public class TaskSchedulerTask {

    @Autowired
    private TaskScheduler taskScheduler;

    @PostConstruct
    public void init() {
        taskScheduler.scheduleAtFixedRate(() -> {
            System.out.println("TaskScheduler 任務(wù)執(zhí)行:" + LocalDateTime.now());
        }, 60000);
    }
}

優(yōu)勢(shì)

  • 簡(jiǎn)單靈活

局限性

  • 不支持復(fù)雜的任務(wù)調(diào)度

5. 使用 Redis 實(shí)現(xiàn)分布式定時(shí)任務(wù)

借助 Redis 的分布式特性,可以實(shí)現(xiàn)簡(jiǎn)單的分布式定時(shí)任務(wù)。

示例代碼

@Component
public class RedisTask {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Scheduled(cron = "0 0/1 * * * ?")
    public void execute() {
        String lockKey = "redis_task_lock";
        Boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, "lock", 60, TimeUnit.SECONDS);

        if (Boolean.TRUE.equals(lock)) {
            try {
                System.out.println("Redis 分布式任務(wù)執(zhí)行:" + LocalDateTime.now());
            } finally {
                redisTemplate.delete(lockKey);
            }
        }
    }
}

優(yōu)勢(shì)

  • 支持分布式環(huán)境

局限性

  • 實(shí)現(xiàn)較為復(fù)雜

6. 使用 XXL-JOB 實(shí)現(xiàn)分布式任務(wù)調(diào)度

XXL-JOB 是一個(gè)輕量級(jí)分布式任務(wù)調(diào)度平臺(tái)。

示例代碼

依賴

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

配置與任務(wù)

@XxlJob("sampleJob")
public void sampleJobHandler() {
    System.out.println("XXL-JOB 任務(wù)執(zhí)行:" + LocalDateTime.now());
}

優(yōu)勢(shì)

  • 強(qiáng)大的分布式調(diào)度能力
  • 提供管理界面

7. 使用開(kāi)源框架 Elastic-Job 實(shí)現(xiàn)動(dòng)態(tài)任務(wù)

Elastic-Job 是一個(gè)分布式任務(wù)調(diào)度框架,支持動(dòng)態(tài)任務(wù)管理。

示例代碼

依賴

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob-lite</groupId>
    <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>

配置與任務(wù)

@ElasticJobConfiguration(
    cron = "0 0/1 * * * ?",
    jobName = "elasticJobSample",
    shardingTotalCount = 1
)
public class ElasticJobTask implements SimpleJob {

    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("Elastic-Job 任務(wù)執(zhí)行:" + LocalDateTime.now());
    }
}

優(yōu)勢(shì)

  • 支持分布式任務(wù)
  • 高度靈活

總結(jié)

在 SpringBoot 中實(shí)現(xiàn)定時(shí)任務(wù)有多種方式,可以根據(jù)實(shí)際需求選擇:

  • 簡(jiǎn)單任務(wù):@Scheduled 和 ScheduledExecutorService
  • 分布式任務(wù):XXL-JOB 和 Elastic-Job
  • 復(fù)雜任務(wù):Quartz
  • 動(dòng)態(tài)任務(wù):TaskScheduler 和 Redis

通過(guò)合理選擇和組合這些工具,能夠構(gòu)建出性能優(yōu)越、功能豐富的定時(shí)任務(wù)系統(tǒng)。

到此這篇關(guān)于SpringBoot最新定時(shí)任務(wù)的7種實(shí)現(xiàn)方案的文章就介紹到這了,更多相關(guān)SpringBoot7種定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot中使用activiti的方法教程(一)

    Spring Boot中使用activiti的方法教程(一)

    最近一直研究springboot,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中使用activiti的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • springboot 加載 META-INF/spring.factories方式

    springboot 加載 META-INF/spring.factories方式

    這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方法

    Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方

    這篇文章主要介紹了Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方法,需要的朋友可以參考下
    2016-08-08
  • SpringBoot使用Mybatis-Generator配置過(guò)程詳解

    SpringBoot使用Mybatis-Generator配置過(guò)程詳解

    這篇文章主要介紹了SpringBoot使用Mybatis-Generator配置過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈

    java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈

    這篇文章主要介紹了java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來(lái)學(xué)習(xí)一下
    2020-07-07
  • Java基于TCP方式的二進(jìn)制文件傳輸

    Java基于TCP方式的二進(jìn)制文件傳輸

    這篇文章主要為大家介紹了Java基于TCP方式的二進(jìn)制文件傳輸,一個(gè)基于Java Socket協(xié)議之上文件傳輸?shù)耐暾纠?,基于TCP通信完成,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 淺談java中null是什么,以及使用中要注意的事項(xiàng)

    淺談java中null是什么,以及使用中要注意的事項(xiàng)

    下面小編就為大家?guī)?lái)一篇淺談java中null是什么,以及使用中要注意的事項(xiàng)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表

    SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表

    這篇文章主要介紹了SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式

    JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式

    這篇文章主要介紹了JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java非法字符‘\ufeff‘解決方法

    java非法字符‘\ufeff‘解決方法

    本文主要介紹了java非法字符‘\ufeff‘解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論

宜丰县| 澜沧| 隆林| 大理市| 木兰县| 三明市| 柘城县| 凯里市| 大悟县| 分宜县| 阿拉善右旗| 临夏市| 杭锦旗| 巨鹿县| 玉屏| 嘉禾县| 新沂市| 平利县| 三门峡市| 南部县| 龙江县| 米泉市| 高州市| 崇明县| 仁布县| 乐至县| 陵川县| 固始县| 姚安县| 伽师县| 临沭县| 白水县| 桦南县| 荥阳市| 高要市| 壤塘县| 中西区| 嘉峪关市| 枞阳县| 天柱县| 云南省|