`
Technoboy
  • 浏览: 156697 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring Quartz

阅读更多
1. Overview
  为了降低使用Quartz的难度,并能以Spring风格的方式使用Quartz,Spring为Quartz提供了Scheduler, Trigger, JobDetail的FactoryBean类,以及一些工具类,使Quartz能很好的注入容器,并可以结合Spring容器的生命周期,启动和关闭job。

2. JobDetailBean
  使用JobDetailBean,需要设置其JobClass属性,指定实现了Job接口的实现类。JobDetailBean默认使用bean名作为job名,DEFAULT作为组名,并可以通过applicationContextJobDataKey键,将ApplicationContext设置到JobDataMap中。JobDetailBean支持以Map方式设置JobDataMap。jobListenerNames属性用于指定job的监听器,类型为String[]。以下是一个例子:
<bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.tboy.example.quartz.MyJobClass" />
		<property name="applicationContextJobDataKey" value="applicationContext"/>
		<property name="jobDataAsMap">
			<map>
				<entry key="container" value="Tomcat"/>
			</map>
		</property>
	</bean>

通过jobClass设置了Job实现类,并设置了Job的JobDataMap,指定了applicationContextJobDataKey键,让Job的JobDataMap持有Spring ApplicationContext的引用。以下是MyJobClass的伪实现:
public class MyJobClass implements Job{

	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		Map dataMap = context.getJobDetail().getJobDataMap();
		String container = (String)dataMap.get("container");
		ApplicationContext applicationContext = (ApplicationContext)dataMap.get("applicationContext");
		//applicationContext.getBean("");
		if(container.equals("Tomcat")){
			//
		}
		//
	}
}


3. JobDetailFactoryBean
  由于JobDetailBean继承org.quartz.JobDetail,在Quartz 2.0以后,JobDetail改为接口,所以JobDetailBean不支持Quartz 2.0以上版本。如果使用Quartz2.0以上版本,可以使用JobDetailFactoryBean。支持的属性设置,与JobDetailBean相同。

4. MethodInvokingJobDetailFactoryBean
  通常情况下,我们都是实现Job接口定义任务,为了避免这种只包含一行调用代码的Job实现类,Spring提供了MethodInvokingJobDetailFactoryBean,可以将一个Bean的某个方法封装成满足Quartz要求的Job。以下是一个例子:
<bean id="myJob" class="com.tboy.example.quartz.MyJob" />
	
	<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="myJob" />
		<property name="targetMethod" value="work" />
		<property name="concurrent" value="true"/>
	</bean>

jobDetail将myJob的work方法封装成一个Job。concurrent属性指定任务的类型,如果为有状态的任务,设置为false即可,默认为true。以下是myJob的伪实现:
public class MyJob {
	
	public void work(){
		//
	}
}

  work方法可以是static,也可以是非static的。但不能有方法入参。由于MethodInvokingJobDetailFactoryBean实现中通过JobExecutionContext取得Scheduler, 而Scheduler不能被序列化,那么创建的JobDetail也不能被序列化,也就不能持久化到数据库,如果想持久化到数据库,只能通过创建Job实现类的方式。MethodInvokingJobDetailFactoryBean支持quartz1.5以2.0以上版本。

5. SimpleTriggerBean
  使用SimpleTriggerBean需要设置jobDetail。SimpleTriggerBean默认使用bean名作为trigger的名称,DEFAULT作为默认组。startDelay属性可以设置延迟触发trigger的时间,单位为毫秒,默认为0。支持以Map方式设置trigger的JobDataMap。以下是一个例子:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
		<property name="jobDetail" ref="jobDetail"/>
		<property name="startDelay" value="1000" />
		<property name="repeatCount" value="5"/>
		<property name="repeatInterval" value="2000"/>
		<property name="jobDataAsMap">
			<map>
				<entry key="count" value="10"/>
			</map>
		</property>
	</bean>

在job实现类中,通过以下方式取得jobDataMap:
public class MyJob implements Job{

	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		Map dataMap = context.getTrigger().getJobDataMap();
		Object count = dataMap.get("count");
		System.out.println(count);
	}
}


6. SimpleTriggerFactoryBean
  由于SimpleTriggerBean继承了org.quartz.SimpleTrigger,因此不支持Quartz2.0以上版本。如果使用Quartz2.0以上版本,可以使用SimpleTriggerFactoryBean。支持的属性设置,与SimpleTriggerBean相同。

7. CronTriggerBean
  CronTriggerBean支持的属性,与SimpleTriggerBean相同。以下是一个例子:
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="jobDetail"/>
		<property name="startDelay" value="1000" />
		<property name="cronExpression">
			<value>0/30 * * * * ?</value>
		</property>
	</bean>


8. CronTriggerFactoryBean
  如果使用Quartz2.0以上版本,可以使用CronTriggerFactoryBean。支持的属性设置,与CronTriggerBean相同。

9. SchedulerFactoryBean
  Spring提供了SchedulerFactoryBean,可以让Scheduler感知Spring容器的生命周期,在容器启动时,Scheduler自动开始工作,容器关闭前,自动关闭Scheduler。以下是一个例子:
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
		<property name="corePoolSize" value="3" />
		<property name="maxPoolSize" value="5" />
		<property name="queueCapacity" value="10" />
	</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="transferJobCronTrigger" />
				<ref bean="deleteJobCronTrigger" />
				<ref bean="softDeleteJobCronTrigger" />
			</list>
		</property>
		<property name="autoStartup" value="true"/>
		<property name="startupDelay" value="5"/>
		<property name="schedulerContextAsMap">
			<map>
				<entry key="timeout" value="30"/>
			</map>
		</property>
		<property name="taskExecutor" ref="executor" />
		<property name="configLocation" value="classpath:com/tboy.example/quartz/quartz.properties"/>
	</bean>

默认情况下,Quartz在类路径下寻找quartz.properties配置文件,可以通过configLocation属性显示指定配置文件的位置。startupDelay属性指定延迟多少时间让容器启动Scheduler,单位为秒。schedulerContextAsMap属性设置了SchedulerContext数据,可以在job中通过JobExecutionContext.getScheduler().getContext().getXxx()方法获取。通过taskExecutor属性设置线程池。支持以Properties方式设置Quartz属性,将覆盖配置文件的值:
<property name="quartzProperties">
   <props>
	<prop key="org.quartz.threadPool.class">
           org.quartz.simpl.SimpleThreadPool
	</prop>
	<prop key="org.quartz.threadPool.threadCount">10</prop>
	<prop key="org.quartz.threadPool.threadPriority">5</prop>
 <prop key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">
true</prop>
    </props>
</property>

 
分享到:
评论

相关推荐

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    spring quartz 表达式在线生成器

    标题中的“Spring Quartz 表达式在线生成器”是指一个工具,它可以帮助开发者方便地创建和测试Spring集成Quartz库时所需的定时任务表达式。Quartz是一个强大的、完全开源的作业调度框架,常用于Java应用中执行定时...

    spring Quartz的jar包

    Spring Quartz是Spring框架与Quartz任务调度库的集成,它为开发者提供了在Spring应用中进行任务调度的强大功能。Quartz是一个开源的作业调度框架,能够处理执行周期性任务的需求。在Java环境中,Spring Quartz使得...

    spring quartz

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用中安排复杂的定时任务。Quartz 是一个开源项目,提供了一套全面的API,用于创建、调度、执行和管理作业。结合Spring框架,Spring Quartz 提供了更...

    spring quartz相关jar包(多版本)

    关于标签"springquartz jar包",这表明这些 jar 文件是专门为整合 Spring 和 Quartz 而准备的。Spring 提供了对 Quartz 的支持,使得开发者可以通过 Spring 的 XML 配置或者注解方式声明和管理 Quartz 调度器,简化...

    spring quartz定时任务demo

    在Java开发中,Spring框架与Quartz库的结合使用能够帮助开发者实现强大的定时任务功能。本文将详细解析“spring quartz定时任务demo”这个项目,它提供了实现Java定时任务的实例,便于快速理解和应用。 首先,...

    Spring Quartz定时任务 jar包

    Spring Quartz定时任务是Java开发中常见的一种任务调度框架,它结合了Spring的优秀特性与Quartz的灵活性,使得开发者能够方便地在应用中实现定时任务的管理。在本压缩包中,包含的是`log4j-1.2.14.jar`这个日志处理...

    spring quartz 表达式生成器 网页版

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用中安排和执行重复或定时的任务。Quartz 表达式是用于定义任务执行时间的一种语言,它可以精确地控制任务何时运行。Spring集成Quartz,提供了更方便...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...

    动态加载属性文件与SpringQuartz的应用

    在IT行业中,动态加载属性文件和Spring Quartz的整合应用是一个重要的技术话题,特别是在构建大型、分布式和可扩展的系统时。下面将详细讲解这两个概念及其相互间的应用。 首先,我们来了解一下动态加载属性文件。...

    Spring Quartz Demo

    **Spring Quartz Demo** Spring Quartz Demo 是一个用于演示如何在Spring框架中集成Quartz调度器的实例。这个项目展示了如何配置Spring来管理和执行定时任务,利用Quartz的强大功能来实现应用程序的自动化作业调度...

    Spring quartz定时调度jar包

    Spring Quartz 定时调度是Java应用中广泛使用的任务调度框架,它允许开发者在Spring应用程序上下文中定义和管理定时任务。这个jar包包含了Spring与Quartz的整合,使得开发者能够利用Quartz的强大功能,同时享受...

    Spring Quartz 定时器示例(Web工程版)

    Spring Quartz 定时器示例(Web工程版),欢迎下载。

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,广泛应用于 Java 企业级应用程序中。其中一个重要的功能便是动态配置时间,触发相应的任务。在本文中,我们将讨论如何使用 Spring Quartz...

    Spring Quartz1.8.x

    Spring Quartz 1.8.x 是一个基于Java的开源任务调度框架,它允许开发者在应用程序中定义定时任务。这个版本是Spring对Quartz Scheduler的一个集成,Quartz是一个强大的、完全可配置的作业调度库,用于执行计划任务。...

    springQuartz.zip

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等众多功能,极大地简化了Java应用的开发。而Quartz则是一...

    Spring Quartz定时作业

    Spring Quartz是一款广泛应用于Java环境下的任务调度框架,它与Spring框架深度集成,使得在Spring应用中配置和管理定时任务变得非常便捷。本项目提供了一套完整的Spring Quartz定时作业的实现,包括任务、触发器和...

    spring quartz 相关文档

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Spring应用中轻松地定义和执行定时任务。这个框架基于开源项目Quartz,它提供了丰富的API来创建、调度和管理作业。Spring Quartz将Quartz与Spring框架无缝...

    spring quartz 时间调用框架

    **Spring Quartz时间调用框架详解** Spring Quartz是一个在Spring框架中集成的时间调度插件,它允许开发者方便地创建和管理定时任务。Quartz是Java领域的一款功能强大的作业调度库,而Spring通过其优秀的IoC...

    spring quartz 集群模式

    标题 "spring quartz 集群模式" 涉及到的是Spring框架与Quartz调度器在集群环境下的集成和配置。Quartz是一个开源任务调度框架,而Spring则提供了与Quartz的无缝集成,使得在Java应用中管理和执行定时任务变得更加...

Global site tag (gtag.js) - Google Analytics