@Scheduled 定時任務自定義

丿似锦發表於2024-08-15

簡介

@Scheduled 定時任務自定義可以透過SchedulingConfigurer實現。
SchedulingConfigurerSpring Framework 中的一個介面,用於配置定時任務。當你需要對定時任務進行更高階別的定製時,這個介面就顯得非常有用。

  • 可以透過SchedulingConfigurer 介面來自定義一些高階配置
  • 可以透過SchedulingConfigurer 自定義執行定時任務的執行緒池。
  • 可以透過SchedulingConfigurer自定義任務排程器,比如使用 Quartz 或其他排程框架。

實現

建立一個類實現SchedulingConfigurer

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(10);
        scheduler.setThreadNamePrefix("schedule-executor-");
        scheduler.initialize();
        taskRegistrar.setScheduler(scheduler);
    }
}

可以透過 ThreadPoolTaskScheduler 或者 ScheduledExecutorService 來配置執行緒池

使用

  • 1.啟動類新增 @EnableScheduling 註解
  • 2.使用 @Scheduled 註解
    @Scheduled(cron = "0/30 * * * * ?")
    public void test(){
        log.info("Scheduled Test -- The time is now " + LocalDateTime.now());
    }

效果

2024-08-15 20:07:00,014 INFO [schedule-executor-2] com.zk.app.manager.PartitionManager - Scheduled Test -- The time is now 2024-08-15T20:07:00.014
2024-08-15 20:07:30,004 INFO [schedule-executor-3] com.zk.app.manager.PartitionManager - Scheduled Test -- The time is now 2024-08-15T20:07:30.004
2024-08-15 20:08:00,010 INFO [schedule-executor-2] com.zk.app.manager.PartitionManager - Scheduled Test -- The time is now 2024-08-15T20:08:00.010
2024-08-15 20:08:30,014 INFO [schedule-executor-1] com.zk.app.manager.PartitionManager - Scheduled Test -- The time is now 2024-08-15T20:08:30.013
2024-08-15 20:09:00,016 INFO [schedule-executor-5] com.zk.app.manager.PartitionManager - Scheduled Test -- The time is now 2024-08-15T20:09:00.016

總結

  • SchedulingConfigurer 提供了一個靈活的方式來定製定時任務的執行方式。
  • 可以配置執行緒池的大小、執行策略等。
  • 透過實現該介面並提供給 Spring,你可以完全控制定時任務的執行環境。
  • 能夠根據自己的需求來配置定時任務,確保它們按照預期的方式執行。

結束

相關文章