SpringBoot 定時任務示例

示例

# ScheduledTaskService.java

package com.ln.myboot3.schedule;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class ScheduledTaskService {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    private ScheduledTaskService() {
        System.out.println("ScheduledTaskService Construct.......");
    }


    @Scheduled(fixedRate = 5000) //通過@Scheduled聲明該方法是計劃任務,使用fixedRate屬性每隔固定時間執行
    public void reportCurrentTime() {
        System.out.println("每隔5秒執行一次 " + dateFormat.format(new Date()));
    }

    @Scheduled(cron = "0 07 20 ? * *") //使用cron屬性可按照指定時間執行,本例指的是每天20點07分執行
    //cron是UNIX和類UNIX(Linux)系統下的定時任務
    public void fixTimeExecution() {
        System.out.println("在指定時間 " + dateFormat.format(new Date()) + " 執行");
    }

    @Scheduled(cron = "0/10 * * * * ?")
    public void init() {
        this.prepare();
    }

    public void prepare() {
        System.out.println("=== 每10s執行一次,now time:" + dateFormat.format(new Date()));
    }
}

#配置 TaskScheduleConfig

package com.ln.myboot3.schedule;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler;

@Configuration
@ComponentScan()
@EnableScheduling
public class TaskScheduleConfig {
    @Bean
    public TaskScheduler taskScheduler() {
        return new ConcurrentTaskScheduler();
    }
}

# 啓動 Myboot3Application

package com.ln.myboot3;

import com.ln.myboot3.schedule.TaskScheduleConfig;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

@SpringBootApplication
public class Myboot3Application {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskScheduleConfig.class);
    }

}

fixedDelay、fixedRate

fixedDelay控制方法執行的間隔時間,是以上一次方法執行結束開始算起,如上一次方法執行阻塞住了,那麼直到上一次執行完,並間隔給定的時間後,執行下一次。

fixedRate是按照一定的速率執行,是從上一次方法執行開始的時間算起,如果上一次方法阻塞住了,下一次也是不會執行,但是在阻塞這段時間內累計應該執行的次數,當不再阻塞時,一下子把這些全部執行掉,而後再按照固定速率繼續執行。

cron含義

[秒] [分] [時] [日] [月] [周] [年]

線上工具: https://cron.qqe2.com/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章