前言
說起定時任務,開發的小伙伴們肯定不陌生了。有些事總是需要計算機去完成的,而不是傻傻的靠我們自己去。可是好多人對定時器總感覺很陌生,今天小編就帶小伙伴們揭開它的神秘面紗,講解一下spring利用squertz實現定時任務。
一、需要的Jar
1
2
3
4
5
6
7
8
9
10
|
quartz- 1.8 . 5 .jar commons-logging.jar spring-core- 3.0 . 5 .RELEASE.jar spring-beans- 3.0 . 5 .RELEASE.jar spring-context- 3.0 . 5 .RELEASE.jar spring-context-support- 3.0 . 5 .RELEASE.jar spring-asm- 3.0 . 5 .RELEASE.jar spring-expression- 3.0 . 5 .RELEASE.jar spring.transaction- 3.0 . 5 .RELEASE.jar spring-web- 3.0 . 5 .RELEASE.jar |
二、配置文件
這里配置你要在什么時候執行你的定時任務,執行的是什么方法,如下面是在2016.11.10 23:00:00,執行com.seewoedu.train.quartz.GenerateRewardListTask
的generate
方法,這里使用cron指定了執行的時間,相關語法可查看http://www.jfrwli.cn/article/90148.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?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" xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 啟動觸發器的配置開始 --> <bean name= "startQuertz" lazy-init= "false" autowire= "no" class = "org.springframework.scheduling.quartz.SchedulerFactoryBean" > <property name= "triggers" > <list> <ref bean= "myJobTrigger" /> </list> </property> </bean> <!-- 啟動觸發器的配置結束 --> <!-- quartz- 2 .x的配置 --> <bean id= "myJobTrigger" class = "org.springframework.scheduling.quartz.CronTriggerFactoryBean" > <property name= "jobDetail" > <ref bean= "myJobDetail" /> </property> <property name= "cronExpression" > <!--<value> 10 0 / 1 * * * ?</value>--> <!-- Cron表達式“ 10 */ 1 * * * ?”意為:從 10 秒開始,每 1 分鐘執行一次。 --> <value> 0 0 9 10 12 ? 2016 </value> <!-- Cron表達式“ 0 0 23 10 11 ? 2016 ”意為:只在 2016.11 . 10 23 : 00 : 00 執行。 --> </property> </bean> <!-- 調度的配置結束 --> <!-- job的配置開始 --> <bean id= "myJobDetail" class = "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" > <property name= "targetObject" > <ref bean= "myJob" /> </property> <property name= "targetMethod" > <value>generate</value> </property> </bean> <!-- job的配置結束 --> <!-- 工作的bean --> <bean id= "myJob" class = "com.seewoedu.train.quartz.GenerateRewardListTask" /> </beans> |
三、被執行的方法
1
2
3
4
5
6
7
8
9
10
11
|
public class GenerateRewardListTask { @Autowired private GiftReceiveRecordService giftReceiveRecordService; org.slf4j.Logger logger = LoggerFactory.getLogger(GenerateRewardListTask. class ); public void generate() throws Exception { giftReceiveRecordService.generateRewardMember(); //執行的方法 } } |
四、需要注意的問題
1、執行時間指定到年份時,會存在一個問題,就是在你在過了這個時間后再啟動項目的時候,他會一直報一個memory leak的錯誤,大概的意思是你的定時任務將永遠不會被執行,導致項目一直啟動不了。
2、定時任務是通過你部署項目開始計算到你要執行定時任務的時間間隔,而不是實時獲取你服務器時間的方法實現的,所以通過修改服務器時間想測試定時任務是否生效是不可行的。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
原文鏈接:http://www.cnblogs.com/0201zcr/p/6099156.html