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 * * * ? 每三分钟触发一次
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
26天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
48 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
218 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
92 1
Spring 框架:Java 开发者的春天
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
2月前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
121 2
|
1月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
49 0
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
44 0
|
Java BI 调度
Java 定时任务技术发展历程
定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等。
194 1
Java 定时任务技术发展历程
|
存储 资源调度 监控
Java定时任务技术趋势
定时任务是每个业务常见的需求,本文详细介绍Java定时任务的技术趋势
1599 1