Quartz与Spring强强联手,定时任务实现更容易

简介:
Quartz与Spring强强联手,定时任务实现更容易
 
环境:
Spring 2.5.4
Quartz 1.6.0
 
Quartz是一个企业级的定时任务执行工具,使用起来也相当容易。但是也有点约束----每个作业必须实现Job接口。
 
Spring早在1.0就对Quartz提供了支持。Spring AOP的强大功能可以将这个无聊的事情见鬼去吧。我们甚至可以将任何一个普通类的方法设定为定时执行的方法。并且在Spring初始化的自动启动定时器(不需要你去写Main方法),在Spring关闭的时候结束定时器的运行,一避免应用服务器都关闭了,定时器还在后台默默无闻“空转”。呵呵,下面就看个例子吧:
 
目标:将一个普通的业务方法作为定时作业的方法通过Spring配置去执行。
 
代码:
 
第一步:写业务方法
 
package stu.quartz; 

/** 
* 业务方法 

* @author leizhimin,2008-10-8 15:41:52 
*/
 
public  class TestService { 
         public  void doSomething() { 
                System.out.println( "Do Something Freely!"); 
        } 

         public  void justDoIt() { 
                System.out.println( "Just Do It!"); 
        } 

 
二、配置Spring
 
<? xml  version ="1.0"  encoding ="UTF-8" ?> 
< beans  default-autowire ="byName"  xmlns ="http://www.springframework.org/schema/beans" 
              xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation ="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]" > 

        <!--  普通的业务Bean --> 
         < bean  name ="testService"  class ="stu.quartz.TestService" /> 

        <!--  作业 --> 
         < bean  id ="jobDetail_test"  class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" > 
                 < property  name ="targetObject"  ref ="testService" /> 
                 < property  name ="targetMethod"  value ="justDoIt" /> 

         </ bean > 

        <!--  触发器 --> 
         < bean  name ="testTrigger"  class ="org.springframework.scheduling.quartz.SimpleTriggerBean" > 
                 < property  name ="jobDetail"  ref ="jobDetail_test" /> 
                 < property  name ="startDelay"  value ="10" /> 
                 < property  name ="repeatInterval"  value ="2000" /> 
                 < property  name ="repeatCount"  value ="100" /> 
                 < property  name ="jobDataAsMap" > 
                         < map > 
                                 < entry  key ="count"  value ="10" /> 
                         </ map > 
                 </ property > 
         </ bean > 

        <!--  计划 --> 
         < bean  name ="testScheduler"  class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" > 
                 < property  name ="triggers" > 
                         < list > 
                                 < ref  bean ="testTrigger" /> 
                         </ list > 
                 </ property > 
                 < property  name ="schedulerContextAsMap" > 
                         < map > 
                                 < entry  key ="timeout"  value ="30" /> 
                         </ map > 
                 </ property > 

                <!--  Quartz的高级配置--> 
                <!-- <property name="configLocation" value="classpath:com/lavasoft/quartz.properties"/>--> 
         </ bean > 

</ beans >
 
三、写测试
 
package stu.quartz; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

/** 
* 测试类 

* @author leizhimin,2008-10-8 16:33:21 
*/
 
public  class TestQuartz { 
         public  static  void main(String[] args) { 
                ApplicationContext context =  new ClassPathXmlApplicationContext( "/Application_quartz.xml"); 
                System.out.println( "Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。"); 

                System.out.println( "Main方法执行结束了!"); 
        } 
}
 
运行测试:
Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。 
Main方法执行结束了! 
Just Do It! 
Just Do It! 
Just Do It! 
Just Do It! 
Just Do It! 
......
 
运行结果表名:在Spring初始化后,定时器根据延迟时间启动执行,并且在执行过过程中,Main线程一直没有退出。定时器线程一直在执行。
 
在强行终止Main线程的时候,定时器也停止执行。
 

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/104357,如需转载请自行联系原作者
相关文章
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
105 1
|
12天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
74 1
|
21天前
|
存储 Java API
简单两步,Spring Boot 写死的定时任务也能动态设置:技术干货分享
【10月更文挑战第4天】在Spring Boot开发中,定时任务通常通过@Scheduled注解来实现,这种方式简单直接,但存在一个显著的限制:任务的执行时间或频率在编译时就已经确定,无法在运行时动态调整。然而,在实际工作中,我们往往需要根据业务需求或外部条件的变化来动态调整定时任务的执行计划。本文将分享一个简单两步的解决方案,让你的Spring Boot应用中的定时任务也能动态设置,从而满足更灵活的业务需求。
59 4
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14829 26
|
3月前
|
Java 关系型数据库 MySQL
SpringBoot 集成 Quartz + MySQL
SpringBoot 集成 Quartz + MySQL
99 1
|
3月前
|
Java 开发者 Spring
Spring Boot实战宝典:揭秘定时任务的幕后英雄,让业务处理如流水般顺畅,轻松驾驭时间管理艺术!
【8月更文挑战第29天】在现代应用开发中,定时任务如数据备份、报告生成等至关重要。Spring Boot作为流行的Java框架,凭借其强大的集成能力和简洁的配置方式,为开发者提供了高效的定时任务解决方案。本文详细介绍了如何在Spring Boot项目中启用定时任务支持、编写定时任务方法,并通过实战案例展示了其在业务场景中的应用,同时提供了注意事项以确保任务的正确执行。
46 0
|
3月前
|
Dubbo Java 调度
揭秘!Spring Cloud Alibaba的超级力量——如何轻松驾驭分布式定时任务调度?
【8月更文挑战第20天】在现代微服务架构中,Spring Cloud Alibaba通过集成分布式定时任务调度功能解决了一致性和可靠性挑战。它利用TimerX实现任务的分布式编排与调度,并通过`@SchedulerLock`确保任务不被重复执行。示例代码展示了如何配置定时任务及其分布式锁,以实现每5秒仅由一个节点执行任务,适合构建高可用的微服务系统。
63 0
|
4月前
|
SQL Java 调度
实时计算 Flink版产品使用问题之使用Spring Boot启动Flink处理任务时,使用Spring Boot的@Scheduled注解进行定时任务调度,出现内存占用过高,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
XML Java Linux
Spring Task 定时任务没有定时执行是为什么?
Spring Task 定时任务没有定时执行是为什么?
62 2
|
5月前
|
Java Spring
解密Spring Boot的定时任务
解密Spring Boot的定时任务
25 0