Spring定時任務例項
一、Quartz介紹
在企業應用中,我們經常會碰到時間任務排程的需求,比如每天凌晨生成前天報表,每小時生成一次彙總資料等等。Quartz是出了名的任務排程框架,它可以與J2SE和J2EE應用程式相結合,功能灰常強大,輕輕鬆鬆就能與Spring整合,使用方便。
二、Quartz中的概念
主要有三個核心概念:排程器、任務和觸發器。三者關係簡單來說就是,排程器負責排程各個任務,到了某個時刻或者過了一定時間,觸發器觸動了,特定任務便啟動執行。概念相對應的類和介面有:
1)JobDetail:望文生義就是描述任務的相關情況;
2)Trigger:描述出發Job執行的時間觸發規則。有SimpleTrigger和CronTrigger兩個子類代表兩種方式,一種是每隔多少分鐘小時執行,則用SimpleTrigger;另一種是日曆相關的重複時間間隔,如每天凌晨,每週星期一執行的話,通過Cron表示式便可定義出複雜的排程方案。
3)Scheduler:代表一個Quartz的獨立執行容器,Trigger和JobDetail要註冊到Scheduler中才會生效,也就是讓排程器知道有哪些觸發器和任務,才能進行按規則進行排程任務。
三、Spring中使用Quartz
1,web專案目錄及所需jar包,釋出到Tomcat
2,新增業務邏輯類(簡單示例):
任務1:
public class QuartzTest { //到了某個時刻就會被呼叫 public void autoRun(){ System.out.println("It's time to run :" + newDate().toString()); //TODO 執行任務邏輯 //........ } }
任務2:
package com.test.task; import java.util.Date; public class QuartzJob { public void work() { System.out.println("QuartzJob is time to run :" + new Date().toString()); } }
3,配置檔案applicationContext.xml(單任務),CronTrigger方式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <bean name="quartzTest" class="com.task.QuartzTest" /> <bean id="quartzTestJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzTest"></property> <property name="targetMethod" value="autoRun"></property> <property name="concurrent" value="false"></property> </bean> <bean id="quartzTestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="quartzTestJob"/> <!-- 每天五秒 --> <property name="cronExpression" value="0/5 * * * * ?"></property> </bean> <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="quartzTestTrigger" /> </list> </property> </bean> </beans>
配置檔案applicationContext.xml(多工),CronTrigger方式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <!-- 定時任務bean --> <bean name="quartzTest" class="com.test.task.QuartzTest" /> <bean name="quartzJob" class="com.test.task.QuartzJob" /> <!-- 定時任務 --> <bean id="quartzTestTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzTest"></property> <property name="targetMethod" value="autoRun"></property> <property name="concurrent" value="true"></property> </bean> <bean id="quartzJobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzJob"></property> <property name="targetMethod" value="work"></property> <property name="concurrent" value="true"></property> </bean> <!-- 定時任務觸發器 --> <bean id="quartzTestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="quartzTestTask"/> <!-- 每五秒 --> <property name="cronExpression" value="0/5 * * * * ?"></property> </bean> <bean id="quartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="quartzJobTask"/> <!-- 每二秒 --> <property name="cronExpression" value="0/2 * * * * ?"></property> </bean> <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="quartzTestTrigger" /> <ref local="quartzJobTrigger" /> </list> </property> </bean> </beans>
4.定時配置方式
1)SimpleTrigger方式:
<!-- Quartz --> <bean name="quartzTest" class="com.jz.schedual.QuartzTest" /> <bean id="quartzTestJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzTest"></property> <property name="targetMethod" value="autoRun"></property> <property name="concurrent" value="false"></property> </bean> <bean id="quartzTestTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="quartzTestJob"/> <!-- 20秒後執行 --> <property相關推薦
Spring定時任務例項
一、Quartz介紹 在企業應用中,我們經常會碰到時間任務排程的需求,比如每天凌晨生成前天報表,每小時生成一次彙總資料等等。Quartz是出了名的任務排程框架,它可以與J2SE和J2EE應用程式相結合,功能灰常強大,輕輕鬆鬆就能與Spring整合,使用方便。 二、
史上最全最詳細的Spring定時任務的講解以及例項
一、最原始的定時任務 1.採用執行緒方式 public static void runTask(){ final long timeInterval = 1000; Runnable runnable = new Runnable() {
spring框架使用Quartz執行定時任務例項詳解
Quartz簡介 1.Quartz,是一個完全由java編寫的開源作業排程框架。它包含了排程器監聽、作業和觸發器監聽,而我們在專案中最常用到的就是它可以作為一個定時器,可以隨時配置監聽、觸發任務進行作業。 2.在Spring的框架裡,Quartz已經
Spring定時任務 @Scheduled註解(多例項支援)
新增pom 資料庫指令碼 修改配置檔案 測試類 一. 新增pom 因為要使用多例項排程,所以我是用了分散式鎖shedlock,Spring pom請自行新增 <!-- shedlock --
Spring定時任務的幾種實現
job 將不 obb 簡單 信息 sim ger 觸發 一個 Spring定時任務的幾種實現: 近日項目開發中需要執行一些定時任務,比如需要在每天淩晨時候,分析一次前一天的日誌信息,借此機會整理了一下定時任務的幾種實現方式,由於項目采用spring框架,所以我都將結合 sp
轉 Spring定時任務的幾種實現 (記錄備用)
官方 ini src def lns 開發 enc http poj http://gong1208.iteye.com/blog/1773177 Spring定時任務的幾種實現 近日項目開發中需要執行一些定時任務,比如需要在每天淩晨時候,分析一次前一天的日誌信息,借此
spring定時任務
strac 屬性 ase port tin aop init 都是 開發 轉自:http://gong1208.iteye.com/blog/1773177 近日項目開發中需要執行一些定時任務,比如需要在每天淩晨時候,分析一次前一天的日誌信息,借此機會整理了一下定時任務
spring定時任務執行兩次的原因與解決方法
ref net 任務 article 服務 每次 bsp tail 本地 spring定時任務,本地執行一次,放到服務器上後,每次執行時會執行兩次,原因及解決辦法。 http://blog.csdn.net/yaobengen/article/details/70312
Spring 定時任務之 @Scheduled cron表達式
按順序 cron sun ron cell last div text table 一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。 按順序依次為 秒(0~59) 分鐘(0~59) 小時(0~23) 天(月)(0~31,但是你需要考慮你月的天數) 月(0~
spring定時任務的註解實現方式
sched class 單線程 pool job 默認 clas 線程 ref STEP 1:在spring配置文件中添加相應配置,以支持定時任務的註解實現 (一)在xml裏加入task的命名空間 <!-- beans裏添加:--> xmlns:task=
spring 定時任務
表示 eth ask color ring family font bean pre <!-- 定時任務 --><task:annotation-driven/> <!-- 註入定時任務 --><bean id="TimerTask
Spring 定時任務Scheduled 開發詳細圖文
定時執行 本地 setting 工具類 location fir clean scan crontab Spring 定時任務Scheduled 開發 文章目錄 一、前言 1.1 定時任務 1.2 開發環境 1.3 技術實現 二、創建包含WEB.
Spring定時(任務)刷新-quartz
參數 j2se pri 實現 觸發 gmv 方法 其中 實例 Quartz是一個完全由java編寫的開源作業調度框架。他可以與J2EE、J2SE集成,用與處理定時任務、定時刷新的需求。此處使用為與Spring項目集成。 在SpringMVC項目中使用quartz: 1.在
spring定時任務.線程池,自定義多線程配置
sys wire eight void port itl edm 代碼 .org 定時任務及多線程配置xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfr
利用Apache PropertiesConfiguration實現spring 定時任務配置的及時重新整理
import java.util.Date; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.Propertie
Spring定時任務啟動兩次
Spring中定義了一個定時任務,但是啟動之後,每次到時間之後,同一個任務都會執行兩邊,並且這個任務費時較長,所有不能放任不管。 在網上找了一些解決方法,但是大家總結的一個問題根源就是,任務被載入兩次,所以就會執行兩次。 下面這位博主對問題做了深入的分析,可以作為參考: http://b
spring定時任務@Scheduled,非同步操作@Async
需求時定時更新專案裡面某一個裝置的狀態。 1.定時任務:spring定時任務@Scheduled(cron = "50 * * * * ? ") 2.更新狀態採用非同步更新,java預設是同步的,非同步採用spring的@Async("async_update_gbStatus")
spring定時任務排程quartz
1.maven依賴 <!-- 定時任務 --> <dependency> <groupId>quartz</groupId> <artifactId>quartz</artifactId> <v
Spring定時任務註解實現定時清空指定資料夾下的檔案
@EnableScheduling和@Scheduled(cron = "0 0 4 * * ?"),通過註解方式實現定時任務: 1 import org.slf4j.Logger; 2 import org.slf4j.LoggerFactory; 3 import org.springfra
Spring定時任務的序列與並行
1、問題:專案中採用註解@Scheduled的形式執行定時任務,由於專案中存在大量定時任務且執行週期較短, 造成許多定時任務未執行或執行時間不準確的情況。 由上圖可以看出定時任務是單執行緒序列執行的。 解決方式: <