當前位置:
首頁 >
Spring Boot定时任务-@Scheduled的使用
發(fā)布時間:2024/4/13
46
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Spring Boot定时任务-@Scheduled的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SpringBoot對于定時任務(wù)的支持,其實我們在開發(fā)過程當中,定時任務(wù)的技術(shù)使用,還是比較多的,比如說我系統(tǒng)當中,要求在一個特定的時間,給用戶發(fā)送一些信息,或者我的系統(tǒng)要求在一個特定的時間,對于Redis緩存的數(shù)據(jù),做一個清除,那么像這樣的需求呢,都離不開定時任務(wù)的支持,那么本章節(jié)會講解兩個定時任務(wù)知識,一個是Spring3.0以后自帶的Scheduled定時任務(wù)器,還有的就是第三方的定時任務(wù)框架,Quartz,其實Scheduled定時任務(wù)器呢,他相比Quartz來講,要簡單一些,如果我們當前的項目當中,定時任務(wù)的設(shè)計并不是很復(fù)雜的話,那么我們使用Schedule就可以去實現(xiàn),如果當前我們對于定時任務(wù)的設(shè)計,是比較復(fù)雜的,那么這個時候可能用Quartz就更容易一些,我們先來看第一個,Scheduled定時任務(wù)器的使用,我們在這里先對Schedule做一個說明,Schedule定時任務(wù)器呢,是Spring3.0以后自帶的一個定時任務(wù)器,所以如果我們在項目當中,想要使用Schedule來做一個定時任務(wù)處理,那我們需要添加一些坐標,來導(dǎo)入jar包,我們導(dǎo)入了一個web啟動器,在Springboot的WEB啟動器當中,并沒有包含Schedule相關(guān)的jar包,所以我們還需要在pom文件當中,添加座標,完成jar包的依賴注入,我們先去添加schedule的坐標<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId>
</dependency>那么Schedule的坐標是什么呢,它是Spring自帶的一個定時器,所以我們只要導(dǎo)入Spring的jar包就可以了,groupId就是org.springframework,然后他的artifactId是spring-context-support,我們把這個坐標加進去以后呢,我們看一下項目的Maven dependencies,這里會多一個org\springframework\spring-context-support\4.3.16.RELEASE\spring-context-support-4.3.16.RELEASE.jar把它打開,在這個包下,有一個org.springframework.scheduling把這個包打開,這個包下所有的類,就是實現(xiàn)定時任務(wù)處理的一個類,所以需要把這個jar包導(dǎo)入進來,他并沒有包含在WEB啟動器當中,這是我們使用Schedule的第一步,在pom文件添加坐標,我們來看第二步,第二步我們就可以編寫一個定時任務(wù)的類了,也就是我們的定時器了@Component
public class ScheduledDemo {/*** 定時任務(wù)方法* @Scheduled:設(shè)置定時任務(wù)* cron屬性:cron表達式。定時任務(wù)觸發(fā)是時間的一個字符串表達形式*/@Scheduled(cron="0/2 * * * * ?")public void scheduledMethod(){System.out.println("定時器被觸發(fā)"+new Date());}
}其實定時任務(wù)器,既不屬于業(yè)務(wù)層,也不屬于持久層,那么我們應(yīng)該用什么來標記他呢,其實我們就要用到Component了,然后我們?nèi)ゼ右粋€定時任務(wù)的一個方法,其實它并不是一個定時觸發(fā)的方法,我們需要怎么做呢,我們需要在方法上添加一個注解,這個注解就叫@Scheduled注解,這里我們說一下這個注解的一個含義,其實這個注解的作用呢,是來設(shè)置定時任務(wù)的,也就是說你在哪個方法上添加了@Scheduled的,就表示當前這個方法,會以一個定時任務(wù)的方法出現(xiàn),一旦時間達到了,方法就會被觸發(fā),我們說過了,既然是定時任務(wù)了,肯定離不開一個觸發(fā)時間的設(shè)定,那么我們怎么設(shè)置一個時間呢,我們在注解當中,去使用一個叫cron的屬性,那我們先來說一下cron屬性的作用,那么cron屬性當中所要的,cron的表達式,那么cron表達式又是什么呢,其實就是一個字符串觸發(fā)時間的表達形式,也就是我們要給定的觸發(fā)時間,基于一個字符串,來表示觸發(fā)的時間,那么就是一個cron表達式,我們來看一個最簡單的,我的觸發(fā)時間要求是這樣的,每2秒鐘觸發(fā)一下我這個方法,然后我這個方法很簡單,什么都不做,就是打印一句話,定時器被觸發(fā),然后我加上一個時間,那么我們怎么來設(shè)置這個時間呢,這里我們先這么寫,我會詳細的講cron表達式,秒 分鐘 小時 月 ?,這個大家不懂,先不要管他,現(xiàn)在我們就編寫了Schedule的一個定時任務(wù),編寫定時任務(wù)類,這是第二步,我們需要在啟動類當中,去修改我們的啟動類,開啟定時任務(wù)的一個使用@SpringBootApplication
@EnableScheduling
public class ScheduledApp {public static void main(String[] args) {SpringApplication.run(ScheduledApp.class, args);}
}在啟動類中開啟定時任務(wù)的使用,找到我們的啟動類,他默認在SpringBoot當中,默認是對Schedule不開啟的,所以我們想讓我們的定時類工作呢,在啟動器當中去開啟他,那么開啟定時任務(wù)器的注解叫什么呢,叫@EnableScheduling,這是我們啟動類當中要對Schudule做一個開啟操作,在這里重要的是這個注解的使用,這樣我們就編寫了一個定時任務(wù)類,我們看能不能觸發(fā)定時任務(wù)方法我從啟動類開始運行,然后我們觀察控制臺,已經(jīng)觸發(fā)了,定時器觸發(fā)了,然后看這個時間,看這個秒數(shù),現(xiàn)在就是基于兩秒作為一個時間觸發(fā)點,所以用Schedule做一個定時任務(wù)的處理,還是比較簡單的,這樣就可以了,我們主要講一下在我們的SpringBoot當中,去使用Schedule來做定時任務(wù),所以cron不做一個重點的講解了
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>spring-boot-scheduled</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的啟動器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 添加Scheduled坐標 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency></dependencies>
</project>
package com.learn.scheduled;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** Scheduled定時任務(wù)*/
@Component
public class ScheduledDemo {/*** 定時任務(wù)方法* @Scheduled:設(shè)置定時任務(wù)* cron屬性:cron表達式。定時任務(wù)觸發(fā)是時間的一個字符串表達形式*/@Scheduled(cron="0/2 * * * * ?")public void scheduledMethod(){System.out.println("定時器被觸發(fā)"+new Date());}
}
package com.learn.scheduled;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;/***Scheduled*/
@SpringBootApplication
@EnableScheduling
public class ScheduledApp {public static void main(String[] args) {SpringApplication.run(ScheduledApp.class, args);}
}
?
總結(jié)
以上是生活随笔為你收集整理的Spring Boot定时任务-@Scheduled的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot整合Spring
- 下一篇: Spring Boot定时任务-cron