1. 程式人生 > >使用spring @Scheduled實現定時任務

使用spring @Scheduled實現定時任務

xmlns:task="http://www.springframework.org/schema/task"

xsi:schemaLocation中加入:

 http://www.springframework.org/schema/task
 http://www.springframework.org/schema/task/spring-task-3.0.xsd"

Spring掃描註解的配置:(如果已經有了,看一下能掃到定時任務類的包麼)

<context:component-scan base-package="com.thinkgem.jeesite">
<!-- base-package 如果多個,用“,”分隔 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <!-- 解決事物失效問題:在主容器中不掃描@Controller註解,在SpringMvc中只掃描@Controller註解 --> </context:component-scan>

任務掃描註解:

<!-- 配置任務線性池 -->
<task:executor id="executor" pool-size="10"/> 
<task:scheduler
id="scheduler" pool-size="10"/>
<!-- 啟用annotation方式 --> <task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true"/>

程式碼實現:
在類檔案上加上註解:

@Service  //在用在controller時要注意,因為之前配置了context:exclude-filter在主容器中遮蔽了controller註解,所以不走前臺請求的話是不能注入此controller的,此時就要使用@component來注入服務。所以建議此時還是將定時任務放到service層比較好。
@Lazy(false)//為了避免spring懶載入造成的定時任務失效,必須加上此註解

在方法上寫定時任務配置:

@Scheduled(cron = "0 0 10 * * ?")
public void birthdayReminder() {
}

配置規則:
一個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。

按順序依次為

秒(0~59)

分鐘(0~59)

小時(0~23)

天(月)(0~31,但是你需要考慮你月的天數)

月(0~11)

天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

7.年份(1970-2099)

其中每個元素可以是一個值(如6),一個連續區間(9-12),一個間隔時間(8-18/4)(/表示每隔4小時),一個列表(1,3,5),萬用字元。由於”月份中的日期”和”星期中的日期”這兩個元素互斥的,必須要對其中一個設定?.

0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 12 ? * WED 表示每個星期三中午12點
“0 0 12 * * ?” 每天中午12點觸發
“0 15 10 ? * *” 每天上午10:15觸發
“0 15 10 * * ?” 每天上午10:15觸發
“0 15 10 * * ? *” 每天上午10:15觸發
“0 15 10 * * ? 2005” 2005年的每天上午10:15觸發
“0 * 14 * * ?” 在每天下午2點到下午2:59期間的每1分鐘觸發
“0 0/5 14 * * ?” 在每天下午2點到下午2:55期間的每5分鐘觸發
“0 0/5 14,18 * * ?” 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
“0 0-5 14 * * ?” 在每天下午2點到下午2:05期間的每1分鐘觸發
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44觸發
“0 15 10 ? * MON-FRI” 週一至週五的上午10:15觸發
“0 15 10 15 * ?” 每月15日上午10:15觸發
“0 15 10 L * ?” 每月最後一日的上午10:15觸發
“0 15 10 ? * 6L” 每月的最後一個星期五上午10:15觸發
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最後一個星期五上午10:15觸發
“0 15 10 ? * 6#3” 每月的第三個星期五上午10:15觸發

有些子表示式能包含一些範圍或列表

例如:子表示式(天(星期))可以為 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字元代表所有可能的值

因此,“”在子表示式(月)裡表示每個月的含義,“”在子表示式(天(星期))表示星期的每一天

“/”字元用來指定數值的增量

例如:在子表示式(分鐘)裡的“0/15”表示從第0分鐘開始,每15分鐘

     在子表示式(分鐘)裡的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣

“?”字元僅被用於天(月)和天(星期)兩個子表示式,表示不指定值

當2個子表示式其中之一被指定了值以後,為了避免衝突,需要將另一個子表示式的值設為“?”

“L” 字元僅被用於天(月)和天(星期)兩個子表示式,它是單詞“last”的縮寫

但是它在兩個子表示式裡的含義是不同的。

在天(月)子表示式中,“L”表示一個月的最後一天

在天(星期)自表示式中,“L”表示一個星期的最後一天,也就是SAT

如果在“L”前有具體的內容,它就具有其他的含義了

例如:“6L”表示這個月的倒數第6天,“FRIL”表示這個月的最一個星期五

注意:在使用“L”引數時,不要指定列表或範圍,因為這會導致問題

欄位 允許值 允許的特殊字元
秒 0-59 , - * /
分 0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可選) 留空, 1970-2099 , - * /

相關推薦

使用spring @Scheduled實現定時任務

xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation中加入: http://www.springframework.org/schema/task

使用Spring的@Scheduled實現定時任務

特殊字符 scheduled class hat table clas ng- ould color 轉載: Spring配置文件xmlns加入 xmlns:task="http://www.springframework.org/schema/task" xsi:sc

Spring定時任務——註解@Scheduled實現定時任務

Scheduled的註解定義了一個特定的方法執行的時間。可以使用fixedRate指定從呼叫開始每次延遲多少毫秒繼續呼叫。還有其他選項,比如fixedDelay,它指定從呼叫開始延時多少毫秒繼續呼叫下一個週期。您還可以使用@Scheduled(cron

Spring+Quartz實現定時任務的配置方法

detail 包含 範例 empty beans ref tail 可選 creat 1、Scheduler的配置 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&g

spring quartz實現定時任務、延時任務的動態增、刪、改、查

配置見前面兩篇部落格 首先我需要的quartz相關的資訊包括任務名稱、任務組名稱、作業開始時間、作業結束時間等,定義一個類UniQuartzBean用於儲存這些屬性: import java.util.Date; public class UniQuartzBean {

Spring+quartz實現定時任務叢集

1.準備環境(以maven為例,如果不是請自行下載需要的jar包) <!-- quartz定時排程器 --> <dependency> <groupId>org.quartz-scheduler&l

Spring+Quartz實現定時任務

DEBUG 2018-01-19 15:56:45,822 org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor: Could not find default TaskScheduler bean org

Spring實現定時任務

Spring做定時器(定時任務):在指定的時間上執行特定的任務。Spring做定時任務的方式:1、spring3.0之前,spring是沒有自帶定是任務的,spring通常和quarts(專業做定時)一起做定時任務,這種方式比較繁瑣,但是功能比較強大2、spring3.0之後

使用Spring定時器@Scheduled註解實現定時任務

在很多時候我們在專案中需要週期性地執行一些操作,並且這些操作不能通過簡單的for迴圈和while迴圈來實現,因此我們需要有一個可以實現定時操作的方法,在spring中就有這麼一個非常方便的方法,下面就簡單記錄下@Scheduled註解的使用方法。 1、首先我們需要一個spring專案,這個是前

springScheduled註解方式實現定時任務

1.spring配置檔案中寫:<!-spring掃描註解包的配置--> <context:component-scan base-package="XXX" /> <!—開

spring boot 通過spring 中的@Scheduled註解實現定時任務

spring boot 執行定時任務很簡單,首先只需在啟動類中加入@EnableScheduling註解, import org.springframework.boot.SpringApplication; import org.springframework.sche

Spring Boot入門(三):使用Scheduled註解實現定時任務

發布 configure code tps enables err except rup .com 在程序開發的過程中,經常會使用到定時任務來實現一些功能,比如: 系統依賴於外部系統的非核心數據,可以定時同步(每天同步一次) 系統內部一些非核心數據的統計計算,可以定時計算

Spring與Quartz的整合實現定時任務調度

java代碼 content sta 一個bug next 小時 change nsa 發現 Spring與Quartz的整合實現定時任務調度 博客分類: Java Web SpringQuartz任務調度定時任務 最近在研究Spring中的定時任務功能,最好的

使用Spring實現定時任務

-1 rep instance 繼承 rom ann ise 而是 們的 一.分類 從實現的技術上來分類,目前主要有三種技術(或者說有三種產品): Java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。使用

Spring+Quartz框架實現定時任務(集群,分布式)

log cor alt 放置 這一 表達 mod 建數據庫 strac 1、定時任務的必要性:定時任務在應用中的重要性不言而喻,大多是應用,特別是金融應用更是離不開定時任務,能用定時任務來處理異常訂單,完成跑批,定時活動(雙11)等。在初期應用的訪問量並不是那麽大,

Spring自帶定時實現定時任務

str esc exec count nis 開始 針對 exe 結束 在Spring框架中實現定時任務的辦法至少有2種(不包括Java原生的Timer及Executor實現方式),一種是集成第三方定時任務框架,如無處不在的Quartz;另一種便是Spring自帶的定時器(

Spring整合Quartz框架實現定時任務跑批(Maven完整版)

觸發器 delay cut www 方法 lin job 定時任務 任務調度 Quartz 介紹Quartz is a full-featured, open source job scheduling service that can be integrated with

Spring的@schedule註解實現定時任務

專案經常會用到定時任務,實現定時任務的方式有很多種。在Spring框架中,實現定時任務很簡單,常用的實現方式是使用註解@Schedule。 @Schedule 常用來實現簡單的定時任務。例如凌晨1點跑批,每1小時更新訂單狀態等 非SpringBoot專案 在springmv

Spring中的定時任務@scheduled

使用@scheduled實現定時任務 A 任務會阻塞 @Component @EnableScheduling public class ATask implements SchedulingConfigurer { @Scheduled(cron="0/10

java spring-quartz定時實現定時任務

Quartz是一個大名鼎鼎的Java版開源定時排程器,功能強悍,使用方便,下面我們看看如何使用它 一、核心概念 Quartz的原理不是很複雜,只要搞明白幾個概念,然後知道如何去啟動和關閉一個排程程式即可。 1、Job 表示一個工作,要執行的具體內容。此介面中只有一個方法 vo