前言
说起定时任务,开发的小伙伴们肯定不陌生了。有些事总是需要计算机去完成的,而不是傻傻的靠我们自己去。可是好多人对定时器总感觉很陌生,今天小编就带小伙伴们揭开它的神秘面纱,讲解一下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.zzvips.com/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