1. 程式人生 > >Spring定時任務例項

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 :" + new
Date().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的形式執行定時任務,由於專案中存在大量定時任務且執行週期較短, 造成許多定時任務未執行或執行時間不準確的情況。    由上圖可以看出定時任務是單執行緒序列執行的。 解決方式: <