比尔云BierYun--阿里云最新优惠活动
阿里云优惠码丨阿里云代金券

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

Java定时器(二)之Spring定时任务、Quartz实现http://www.bieryun.com/1863.html

  • 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 * * * ? 每三分钟触发一次

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

强烈推荐

高性能SSD云服务器ECS抗攻击,高可用云数据库RDS