spring利用squertz实现定时任务
前言
说起定时任务,开发的小伙伴们肯定不陌生了。有些事总是需要计算机去完成的,而不是傻傻的靠我们自己去。可是好多人对定时器总感觉很陌生,今天小编就带小伙伴们揭开它的神秘面纱,讲解一下spring利用squertz实现定时任务。
一、需要的Jar
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.1023:00:00,执行com.seewoedu.train.quartz.GenerateRewardListTask的generate方法,这里使用cron指定了执行的时间,相关语法可查看https://www.nhooo.com/article/103861.htm
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="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"> <!--启动触发器的配置开始--> <beanname="startQuertz"lazy-init="false"autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <propertyname="triggers"> <list> <refbean="myJobTrigger"/> </list> </property> </bean> <!--启动触发器的配置结束--> <!--quartz-2.x的配置--> <beanid="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <propertyname="jobDetail"> <refbean="myJobDetail"/> </property> <propertyname="cronExpression"> <!--<value>100/1***?</value>--><!--Cron表达式“10*/1***?”意为:从10秒开始,每1分钟执行一次。--> <value>0091012?2016</value><!--Cron表达式“00231011?2016”意为:只在2016.11.1023:00:00执行。--> </property> </bean> <!--调度的配置结束--> <!--job的配置开始--> <beanid="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <propertyname="targetObject"> <refbean="myJob"/> </property> <propertyname="targetMethod"> <value>generate</value> </property> </bean> <!--job的配置结束--> <!--工作的bean--> <beanid="myJob"class="com.seewoedu.train.quartz.GenerateRewardListTask"/> </beans>
三、被执行的方法
publicclassGenerateRewardListTask{ @Autowired privateGiftReceiveRecordServicegiftReceiveRecordService; org.slf4j.Loggerlogger=LoggerFactory.getLogger(GenerateRewardListTask.class); publicvoidgenerate()throwsException{ giftReceiveRecordService.generateRewardMember();//执行的方法 } }
四、需要注意的问题
1、执行时间指定到年份时,会存在一个问题,就是在你在过了这个时间后再启动项目的时候,他会一直报一个memoryleak的错误,大概的意思是你的定时任务将永远不会被执行,导致项目一直启动不了。
2、定时任务是通过你部署项目开始计算到你要执行定时任务的时间间隔,而不是实时获取你服务器时间的方法实现的,所以通过修改服务器时间想测试定时任务是否生效是不可行的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。