當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Boot定时任务-@Scheduled的使用
生活随笔
收集整理的這篇文章主要介紹了
Spring Boot定时任务-@Scheduled的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SpringBoot對于定時任務的支持,其實我們在開發過程當中,定時任務的技術使用,還是比較多的,比如說我系統當中,要求在一個特定的時間,給用戶發送一些信息,或者我的系統要求在一個特定的時間,對于Redis緩存的數據,做一個清除,那么像這樣的需求呢,都離不開定時任務的支持,那么本章節會講解兩個定時任務知識,一個是Spring3.0以后自帶的Scheduled定時任務器,還有的就是第三方的定時任務框架,Quartz,其實Scheduled定時任務器呢,他相比Quartz來講,要簡單一些,如果我們當前的項目當中,定時任務的設計并不是很復雜的話,那么我們使用Schedule就可以去實現,如果當前我們對于定時任務的設計,是比較復雜的,那么這個時候可能用Quartz就更容易一些,我們先來看第一個,Scheduled定時任務器的使用,我們在這里先對Schedule做一個說明,Schedule定時任務器呢,是Spring3.0以后自帶的一個定時任務器,所以如果我們在項目當中,想要使用Schedule來做一個定時任務處理,那我們需要添加一些坐標,來導入jar包,我們導入了一個web啟動器,在Springboot的WEB啟動器當中,并沒有包含Schedule相關的jar包,所以我們還需要在pom文件當中,添加座標,完成jar包的依賴注入,我們先去添加schedule的坐標<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId>
</dependency>那么Schedule的坐標是什么呢,它是Spring自帶的一個定時器,所以我們只要導入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把這個包打開,這個包下所有的類,就是實現定時任務處理的一個類,所以需要把這個jar包導入進來,他并沒有包含在WEB啟動器當中,這是我們使用Schedule的第一步,在pom文件添加坐標,我們來看第二步,第二步我們就可以編寫一個定時任務的類了,也就是我們的定時器了@Component
public class ScheduledDemo {/*** 定時任務方法* @Scheduled:設置定時任務* cron屬性:cron表達式。定時任務觸發是時間的一個字符串表達形式*/@Scheduled(cron="0/2 * * * * ?")public void scheduledMethod(){System.out.println("定時器被觸發"+new Date());}
}其實定時任務器,既不屬于業務層,也不屬于持久層,那么我們應該用什么來標記他呢,其實我們就要用到Component了,然后我們去加一個定時任務的一個方法,其實它并不是一個定時觸發的方法,我們需要怎么做呢,我們需要在方法上添加一個注解,這個注解就叫@Scheduled注解,這里我們說一下這個注解的一個含義,其實這個注解的作用呢,是來設置定時任務的,也就是說你在哪個方法上添加了@Scheduled的,就表示當前這個方法,會以一個定時任務的方法出現,一旦時間達到了,方法就會被觸發,我們說過了,既然是定時任務了,肯定離不開一個觸發時間的設定,那么我們怎么設置一個時間呢,我們在注解當中,去使用一個叫cron的屬性,那我們先來說一下cron屬性的作用,那么cron屬性當中所要的,cron的表達式,那么cron表達式又是什么呢,其實就是一個字符串觸發時間的表達形式,也就是我們要給定的觸發時間,基于一個字符串,來表示觸發的時間,那么就是一個cron表達式,我們來看一個最簡單的,我的觸發時間要求是這樣的,每2秒鐘觸發一下我這個方法,然后我這個方法很簡單,什么都不做,就是打印一句話,定時器被觸發,然后我加上一個時間,那么我們怎么來設置這個時間呢,這里我們先這么寫,我會詳細的講cron表達式,秒 分鐘 小時 月 ?,這個大家不懂,先不要管他,現在我們就編寫了Schedule的一個定時任務,編寫定時任務類,這是第二步,我們需要在啟動類當中,去修改我們的啟動類,開啟定時任務的一個使用@SpringBootApplication
@EnableScheduling
public class ScheduledApp {public static void main(String[] args) {SpringApplication.run(ScheduledApp.class, args);}
}在啟動類中開啟定時任務的使用,找到我們的啟動類,他默認在SpringBoot當中,默認是對Schedule不開啟的,所以我們想讓我們的定時類工作呢,在啟動器當中去開啟他,那么開啟定時任務器的注解叫什么呢,叫@EnableScheduling,這是我們啟動類當中要對Schudule做一個開啟操作,在這里重要的是這個注解的使用,這樣我們就編寫了一個定時任務類,我們看能不能觸發定時任務方法我從啟動類開始運行,然后我們觀察控制臺,已經觸發了,定時器觸發了,然后看這個時間,看這個秒數,現在就是基于兩秒作為一個時間觸發點,所以用Schedule做一個定時任務的處理,還是比較簡單的,這樣就可以了,我們主要講一下在我們的SpringBoot當中,去使用Schedule來做定時任務,所以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定時任務*/
@Component
public class ScheduledDemo {/*** 定時任務方法* @Scheduled:設置定時任務* cron屬性:cron表達式。定時任務觸發是時間的一個字符串表達形式*/@Scheduled(cron="0/2 * * * * ?")public void scheduledMethod(){System.out.println("定時器被觸發"+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);}
}
?
總結
以上是生活随笔為你收集整理的Spring Boot定时任务-@Scheduled的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot整合Spring
- 下一篇: Spring Boot定时任务-cron