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 * * * ? 每三分钟触发一次
相关文章
|
3月前
|
Java 调度
Java实现定时启动,且只执行一次,如何实现?
【10月更文挑战第18天】Java实现定时启动,且只执行一次,如何实现?
387 3
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
80 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
269 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
3月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
116 1
Spring 框架:Java 开发者的春天
|
3月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
3月前
|
Java
用java搞定时任务,将hashmap里面的值存到文件里面去
本文介绍了如何使用Java的`Timer`和`TimerTask`类创建一个定时任务,将HashMap中的键值对写入到文本文件中,并提供了完整的示例代码。
51 1
用java搞定时任务,将hashmap里面的值存到文件里面去
|
2月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
66 0
|
3月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
81 1
|
3月前
|
监控 Java
Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
【10月更文挑战第13天】Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
179 1
|
3月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
186 1

热门文章

最新文章