spring项目中使用定时任务
当我们希望在某个时间点来执行一些业务方法的时候就用到定时任务,在spring的项目中使用定时任务很简单。如下 第一步、加入jar包 <dependency> groupId>org.springframework</artifactId>spring-context-supportversion>3.1.0.RELEASE> > 第二步、编写任务类 public class TestTask { @Autowired private XXXService xxxService; void taskMethod1() { xxxService.doSomeThing(); } public void taskMethod2() { 任务类和普通java类一样,任务方法也和普通方法一样,任务方法中的操作,根据具体的需要来写。 第三步、在spring配置文件中加入配置。 <!-- 定时任务类 --> bean id="testTask" class="com.xxx.TestTask"/> 任务1 ="task1"="org.springframework.scheduling.quartz.MethodInvokingJobDetailfactorybean"> property name="targetObject"> ref bean="testTask" /> property> ="targetMethod"> value>testMethod1> > ="task1Trigger"="org.springframework.scheduling.quartz.CronTriggerBean"="jobDetail"> ="task1" /> ="cronExpression">0 0 12 * * ?><!-- 表示每天中午12点0分0秒执行--> > <!-- ="doTaskTriggerTaskTriggerscheduler"="org.springframework.scheduling.quartz.Schedulerfactorybean"="triggers"list> ref local="task1Trigger" /> <!--登记其他的任务触发bean ="otherTrigger" /> --> > 其中 cronExpression 下面的表达式格式为 7位符号 中间加空格拼接而成,可以为6位,用例如下 秒 0-59,- * /
分 0-59,- * /
小时 0-23,- * /
日期 1-31,- * ? / L W C
月份 1-12 或者 JAN-DEC,- * /
星期 1-7 或者 SUN-SAT,- * ? / L C #
年(可选) 留空,1970-2099,- * /
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
? 注:我在使用的时候曾报了很多错误,在网上搜了之后基本都说是spring和quartz版本不兼容的问题,总结如下 错误:Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class 附错误示例及解决方法:参考? https://code.google.com/p/wisematches/issues/detail?id=156 spring3.1.0及以下的版本使用quartz2以下的版本OK spring3.1.1及以上的版本使用quartz2以下的版本OK?? 本例:使用spring3.1.0 + quartz1.8.2 OK 经测试:spring3.1.1+quartz2.1.0? OK 但是 上面的配置文件中需使用org.springframework.scheduling.quartz.CronTriggerfactorybean(低版本用的是CronTriggerBean) ? ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |