Spring 定時任務實現 以及沒法正常執行分析

Spring 定時任務實現 以及沒法正常執行分析spring


背景:使用quartz時客戶現場不知道爲何跑着跑着就停了,後來決定換成spring定時任務。app


按道理使用spring 定時任務應該是很簡單的,不過仍是踩到一些坑,下面記錄過程並逐一分析說明,供之後參考;ide


一、使用註解的形式完成執行定時任務spa

1.1 applicationContext.xml中要包含對類掃描聲明,以及開啓task定時任務註解聲明(以下)debug

    <context:component-scan base-package="com.carnation" />component

    <task:annotation-driven />orm


1.2 完成本身的task相關類,並作配置以下xml

@Componentget

@Lazy(false)     //當application.xml中default-lazy-init="true"時,這裏lazy必須是falseit

@EnableScheduling

public class HeBeiTask1 {

@Scheduled(cron = "0 0/2 * * * ?")

public void doTask(){

。。。。。。

doMyJob();

}

private void doMyJob(){

。。。。。。

}

}


1.3 踩坑記錄-沒法正常執行

(1)若是在spring中配置了default-lazy-init="true"的話,這裏必定要有@Lazy(false),不然不執行;

(2)若是使用spring4 的話,聽說@EnableScheduling必需要加上,不然也可能不執行(spring3 是不須要的);

(3)定時方法上@Scheduled的配置,及cron表達式的正確性

(4)固然最基礎的一點是你的類必定要能被spring管理到(@Component)



二、使用xml配置的形式完成執行定時任務

2.1 applicationContext.xml中要包含任務類的註冊,並配置task:scheduled-tasks及task:scheduled,參考以下

    <bean name="stdTask1" class="com.carnation.quartz.HeBeiTask1" lazy-init="false"></bean> <!--看狀況分析這裏是否要有lazy-init="false"-->

    <bean name="stdTask2" class="com.carnation.quartz.HeBeiTask2" lazy-init="false"></bean>

    <bean name="stdTask3" class="com.carnation.quartz.HeBeiTask3" lazy-init="false"></bean>

    <task:scheduled-tasks>   

        <task:scheduled ref="stdTask1" method="doTask" cron="0 0/2 * * * ?"/>   

        <task:scheduled ref="stdTask2" method="doTask" cron="0 0/5 * * * ?"/>   

        <task:scheduled ref="stdTask3" method="doTask" cron="0 0/2 * * * ?"/>   

    </task:scheduled-tasks>


2.2 完成本身的task相關類,很是簡單參考以下:

public class HeBeiTask2 {

private Logger logger = Logger.getLogger(HeBeiTask2.class);


@Autowired

StandardColumnService standardColumnService;

public void doTask(){

try {  

            DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    

            logger.debug(sdf.format(new Date())+" HeiBeiTask-2 for SyncMetaDataJob1 開始執行");  

            doMyJob();

        } catch (Exception e) {  

        logger.error("HeiBeiTask2異常",e);

        }  

}

private void doMyJob(){

。。。。。。

}


2.3 踩坑記錄-沒法正常執行

    若是在spring中配置了default-lazy-init="true"的話,這裏必定要有lazy-init="false",不然不執行;


到此,spring定時任務就算是完成了,兩種方法都可正常運行。


但出現問題了,在執行的時候發現會有重複執行的問題。

相關文章
相關標籤/搜索