Java定时器(二)之Spring定时任务、Quartz实现

Java定时器(二)之Spring定时任务、Quartz实现

  • spring定时器(基于xml)
  • spring定时器(基于注解)
  • quartz定时器
 
1、使用基于xml配置的spring定时器
首先编写定时任务类Mytask

[java] view plain copy

  1. public class Mytask {
  2.   public void execute(){
  3.   System.out.println("基于xml配置的spring定时任务!");
  4.  }
  5. }
接着在spring配置文件中加入xmlns:task="http://www.springframework.org/schema/task"命名空间

[html] view plain copy

  1. <task:annotation-driven/>
  2. <bean id="mytask" class="com.pptv.vipbackend.controller.Mytask"/>
  3. <task:scheduled-tasks>
  4. <task:scheduled ref="mytask" cron="*/5 * * * * ?" method="print"/><!--每隔5秒执行一次-->
  5. </task:scheduled-tasks>
当然,定时任务类要加入spring的管理中

[html] view plain copy

  1. <context:component-scan base-package="com.simonsfan.study.controller.Mytask">
执行便可看到效果
 
2、使用基于注解配置的spring定时器
基于注解会相对简单的多,直接编写任务类Mytask:

[java] view plain copy

  1. @EnableScheduling
  2. @Component
  3. public class Mytask {
  4.   @Scheduled(cron = "*/5 * * * * ?")
  5.   public void execute(){
  6.     System.out.println("基于注解配置的spring定时任务!");
  7.   }
  8. }
当然,任务类也要纳入spring管理

[html] view plain copy

  1. <context:component-scan base-package="com.simonsfan.study.controller.Mytask">
  2. <task:annotation-driven/>
启动可以看到相同效果
 
3、quartz定时器,其性能和灵活性都优于jdk的TimerTask类
pom文件中加入

[html] view plain copy

  1. <dependency>
  2. <groupId>org.quartz-scheduler</groupId>
  3. <artifactId>quartz</artifactId>
  4. <version>2.2.2</version>
  5. </dependency>
 
定时任务类Mytask:

[java] view plain copy

  1. @Component
  2. public class Mytask {
  3.   public void execute() {
  4.     System.out.println("基于spring+quartz实现定时任务!");;
  5.   }
  6. }
spring配置文件中加入:

[html] view plain copy

  1. <bean id="jobBean" class="com.pptv.vipbackend.controller.Mytask"/>
  2. <bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  3. <property name="targetObject">
  4. <ref bean="jobBean"/>
  5. </property>
  6. <property name="targetMethod">
  7. <value>execute</value><!--任务类中的方法名-->
  8. </property>
  9. <!--将并发设置为false-->
  10. <property name="concurrent" value="false" />
  11. </bean>
  12. <bean id="simpleTrigger"
  13. class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
  14. <property name="jobDetail" ref="myJobDetail" />
  15. <property name="startDelay" value="1000" />
  16. <property name="repeatInterval" value="2000" />
  17. </bean>
  18. <!-- 总管理类如果将lazy-init='false'那么容器启动就会执行调度程序 -->
  19. <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autowire="no">
  20. <property name="triggers">
  21. <list>
  22. <!--作业调度器,list下可加入其他的调度器-->
  23. <ref bean="simpleTrigger" />
  24. </list>
  25. </property>
  26. </bean>
这样,基于spring + quartz便可实现定时任务的调度
 
定时任务中的时间表达式:
顺序: 分钟 小时 日期 月份 星期 年(可选)
取值: 0-59 0-59 0-23 1-30(31) 1-12 1-7  
允许特殊字符: , - * / , - * / , - * / , - * / ? L W C , - * / , - * / L # C 1970-2099 , - * /
字段含义

[html] view plain copy

  1. *:代表所有可能的值
  2. -:指定范围
  3. ,:列出枚举  例如在分钟里,"5,15"表示5分钟和20分钟触发
  4. /:指定增量  例如在分钟里,"3/15"表示从3分钟开始,没隔15分钟执行一次
  5. ?:表示没有具体的值,使用?要注意冲突
  6. L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五
  7. W:只能用在月份中,表示最接近指定天的工作日
  8. #:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五
  9. 0 * * * * ? 每1分钟触发一次
  10. 0 0 * * * ? 每天每1小时触发一次
  11. 0 0 10 * * ? 每天10点触发一次
  12. 0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
  13. 0 30 9 1 * ? 每月1号上午9点半
  14. 0 15 10 15 * ? 每月15日上午10:15触发
  15. */5 * * * * ? 每隔5秒执行一次
  16. 0 */1 * * * ? 每隔1分钟执行一次
  17. 0 0 5-15 * * ? 每天5-15点整点触发
  18. 0 0/3 * * * ? 每三分钟触发一次
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/507034

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。