欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1. 使用 @Scheduled 注解實現(xiàn)簡單定時任務

Spring 提供了 @Scheduled 注解,可以快速實現(xiàn)定時任務。只需在啟動類或配置類上加上 @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("簡單定時任務執(zhí)行:" + LocalDateTime.now());
        }
    }
}

優(yōu)勢

  • 簡單易用
  • 無需額外依賴

局限性

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

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

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

示例代碼

@Component
public class ExecutorServiceTask {

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

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

優(yōu)勢

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

局限性

  • 不支持動態(tài)配置任務

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

Quartz 是一個功能強大的任務調(diào)度框架,支持復雜的調(diào)度任務。

示例代碼

依賴

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

配置與任務

@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 任務執(zhí)行:" + LocalDateTime.now());
        }
    }
}

優(yōu)勢

  • 支持分布式任務
  • 功能強大

局限性

  • 學習曲線較陡
  • 配置復雜

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

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

示例代碼

@Component
public class TaskSchedulerTask {

    @Autowired
    private TaskScheduler taskScheduler;

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

優(yōu)勢

  • 簡單靈活

局限性

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

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

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

示例代碼

@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 分布式任務執(zhí)行:" + LocalDateTime.now());
            } finally {
                redisTemplate.delete(lockKey);
            }
        }
    }
}

優(yōu)勢

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

局限性

  • 實現(xiàn)較為復雜

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

XXL-JOB 是一個輕量級分布式任務調(diào)度平臺。

示例代碼

依賴

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

配置與任務

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

優(yōu)勢

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

7. 使用開源框架 Elastic-Job 實現(xiàn)動態(tài)任務

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

示例代碼

依賴

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

配置與任務

@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 任務執(zhí)行:" + LocalDateTime.now());
    }
}

優(yōu)勢

  • 支持分布式任務
  • 高度靈活

總結(jié)

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

  • 簡單任務:@Scheduled 和 ScheduledExecutorService
  • 分布式任務:XXL-JOB 和 Elastic-Job
  • 復雜任務:Quartz
  • 動態(tài)任務:TaskScheduler 和 Redis

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

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

相關文章

  • java發(fā)送javax.mail郵件實例講解

    java發(fā)送javax.mail郵件實例講解

    這篇文章主要為大家介紹了java發(fā)送javax.mail郵件實例講解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Spring @RestController注解組合實現(xiàn)方法解析

    Spring @RestController注解組合實現(xiàn)方法解析

    這篇文章主要介紹了Spring @RestController注解組合實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Spring的初始化和XML解析的實現(xiàn)

    Spring的初始化和XML解析的實現(xiàn)

    這篇文章主要介紹了Spring的初始化和XML解析的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Spring Boot  Excel文件導出下載實現(xiàn)代碼

    Spring Boot Excel文件導出下載實現(xiàn)代碼

    這篇文章帶領我們直接實現(xiàn)Excel文件的直接導出下載,后續(xù)開發(fā)不需要開發(fā)很多代碼,直接繼承已經(jīng)寫好的代碼,增加一個Xml配置就可以直接導出。具體實現(xiàn)代碼大家跟隨小編一起通過本文學習吧
    2018-11-11
  • Java變量和對象的作用域

    Java變量和對象的作用域

    本文主要介紹了Java變量和對象的作用域的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 基于Eclipce配置Spring Boot過程圖解

    基于Eclipce配置Spring Boot過程圖解

    這篇文章主要介紹了基于Eclipce配置Spring Boot過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    本篇文章將為大家講述關于 SpringBoot 項目工程完成后,是如何通過 java-jar 命令來啟動的,以及介紹 java-jar 命令的詳細內(nèi)容,對SpringBoot java?-jav啟動過程感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • 詳細解讀Druid數(shù)據(jù)庫連接池的使用

    詳細解讀Druid數(shù)據(jù)庫連接池的使用

    這篇文章主要介紹了Druid數(shù)據(jù)庫連接池的使用,數(shù)據(jù)庫連接池負責分配、管理和釋放數(shù)據(jù)庫連接,它允許應用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個,需要的朋友可以參考下
    2023-03-03
  • SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權動態(tài)權限問題

    SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權動態(tài)權限問題

    這篇文章主要介紹了SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權-動態(tài)權限,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Java中的Web MVC簡介_動力節(jié)點Java學院整理

    Java中的Web MVC簡介_動力節(jié)點Java學院整理

    MVC模型是一種架構(gòu)型的模式,本身不引入新功能,只是幫助我們將開發(fā)的結(jié)構(gòu)組織的更加合理,使展示與模型分離、流程控制邏輯、業(yè)務邏輯調(diào)用與展示邏輯分離
    2017-09-09

最新評論