手把手教你Spring boot創建定時任務及集成Quartz


來源於  https://baijiahao.baidu.com/s?id=1643116834093455970&wfr=spider&for=pc

每晚10點,捕獲技術思考和創業資源洞察

當你想要放棄的那一刻,想想當初為什么堅持走到了這里

文|洪生鵬

客戶有個需求,需要定時同步銷售人員資料,剛開始打算用mysql定時任務實現,發現效果不太理想,於是選擇用spring boot 中的定時創建任務來實現。關於SpringBoot創建定時任務很簡單,一般有4種,下面我們一起來了解下:

Timer:這是java自帶的java.util.Timer類,這個類允許我們調度一個java.util.TimerTask任務。可以讓我們的程序按照某一個頻度執行,不足之處是不能在指定時間運行。一般用的比較少。ScheduledExecutorService:也是jdk自帶的類;是基於線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,任務是並發執行,互不影響。Spring Task:是Spring3.0以后自帶的task,可以將它看成一個輕量級的Quartz。Quartz:這是一個功能比較強大的的調度器,可以讓我們的程序在指定時間執行,也可以按照某一個頻度執行,只不過配置起來稍微有點復雜。Timer

public class TaskTimer {public static void main(String[] args) {TimerTask timerTask = new TimerTask() { @Override public void run() {System.out.println("任務啟動"+ new Date()); } }; Timer timer = new Timer(); //每10秒執行一次 timer.schedule(timerTask,10,10000); } }

對於ScheduledExecutorService和Spring Task不多談。哪個配置比較麻煩,我們就來嘗試哪種,重點來看一下Quartz實現定時任務。

Quartz

第一,我們在pom文件中添加依賴,如果SpringBoot版本是2.0.0以后的,則在spring-boot-starter中已經包含了quart的依賴,則可以直接使用spring-boot-starter-quartz依賴:

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

要是1.5.9則要使用以下添加依賴:

<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId> <version>2.3.0</version></dependency> <dependency><groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>

接下來,我們創建任務類TestQuartz,主要繼承了QuartzJobBean

public class TestQuartz extends QuartzJobBean {/** * 執行定時任務 * * @param jobExecutionContext * @throws JobExecutionException */@Override protected void executeInternal(JobExecutionContextjobExecutionContext) throws JobExecutionException {System.out.println("洪生鵬 quartz task " + new Date()); } }

創建配置類QuartzConfig

@Configurationpublic class QuartzConfig { @Bean public JobDetail teatQuartzDetail() { return JobBuilder.newJob(TestQuartz.class).withIdentity("testQuartz"). storeDurably().build(); } @Bean public Trigger testQuartzTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2) //設置時間周期單位秒 每隔兩秒實行一次 .repeatForever(); return TriggerBuilder.newTrigger().forJob(teatQuartzDetail()).withIdentity("testQuartz") .withSchedule(scheduleBuilder) .build(); } }

Run項目,我們可以看到控制台打印出如下信息:

至此關於定時任務,我們就創建完成了。

以上簡單地介紹了關於SpringBoot定時任務的處理,更多功能還需摸索。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM