`

Spring对Quartz的支持 任务调度

阅读更多
Spring对任务调度的支持有两种不同的形式:基于JDK Timer和基于Quartz。
我主要说基于Quartz方面的两个例子,如下
项目实战的说明:
Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。

项目实战一
spring 定时器 配置(通过MethodInvokingJobDetailFactoryBean)
优点:MethodInvokingJobDetailFactoryBean,它能够将普通POJO指定为用户任务。
(1) <bean id="job1" class="com.hxrainbow.marketing.scheduler.jobbean.Test" />  //任务

(2) // 定义调度工作任务
<bean id="birthdayMarketingJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="job1" />
</property>
<property name="targetMethod">
<value>test</value>
</property>
</bean>


(3) // 触发任务条件

<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。  -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>


(4) <!--  启动调度  -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>

以下是执行任务的类:
public class Test {
public void test(){
System.out.println("-------------测试任务-------------");
}
}
项目实战二
spring 定时器 配置(通过JobDetailBean)

(1) <bean id="springContextHolder" class="com.hxrainbow.crm.util.SpringContextHolder" />
//以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.

public class SpringContextHolder implements ApplicationContextAware{

private static ApplicationContext applicationContext;

/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}

/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}

/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}

/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps!=null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else{
return null;
}
}

private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}

}
(2) // 定义调度工作任务
    <bean id ="birthdayMarketingJob" class
="org.springframework.scheduling.quartz.JobDetailBean"> <property name
="jobClass" >
<value>com.hxrainbow.marketing.scheduler.jobbean.BirthdayMarketingJob</value
> </property> </bean>

(3) // 触发任务条件

<!-- 生日关怀 -->
<bean id="cronBirthdayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="birthdayMarketingJob"></property>
<!-- 系统会在每分钟的0秒执行调度任务。  -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
        <!--设置参数 -->
<property name="jobDataAsMap">
<map>
<entry key="festivalName">
<value>元旦</value>
</entry>
</map>
</property>
</bean>


(4) <!--  启动调度  -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronBirthdayTrigger" />
</list>
</property>
</bean>

以下是执行任务的类:
public class BirthdayMarketingJob extends QuartzJobBean{

static Log logger = LogFactory.getLog(BirthdayMarketingJob.class);  

/**
* 生日关怀serivce
*/
private  BirthdayMarketingService birthdayMarketingService = SpringContextHolder.getBean("birthdayMarketingService");

/**
* 计划任务执行
*
* @param context
* @throws JobExecutionException
*
*/
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
logger.info("--------job 开始---------");
// 执行必要的业务逻辑
//birthdayMarketingService = (BirthdayMarketingService) appcontext.getBean("birthdayMarketingService");

// Every job has its own job detail      
        JobDetail jobDetail = context.getJobDetail();      
   
        // The name is defined in the job definition      
        String jobName = jobDetail.getName();      
   
        // Log the time the job started      
        logger.info(jobName + "==BirthdayMarketingJob== fired at " + new Date());      
   
        // The directory to scan is stored in the job map      
        //JobDataMap dataMap = jobDetail.getJobDataMap();    
      
        //查询全体会员的生日关怀
        TBirthday birthday = birthdayMarketingService.getBirthdayForMember();
        //进入生日关怀队列
        birthdayMarketingService.intoBirthdayQueue(birthday.getId());
        //执行生日关怀队列
        birthdayMarketingService.executeBirthdayQueue(birthday.getId());
       
        logger.info("--------job 结束---------");
}

public BirthdayMarketingService getBirthdayMarketingService() {
return birthdayMarketingService;
}

public void setBirthdayMarketingService(
BirthdayMarketingService birthdayMarketingService) {
this.birthdayMarketingService = birthdayMarketingService;
}      

}
分享到:
评论

相关推荐

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    Spring+Quartz实现任务调度的小例子

    Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...

    基于Spring和Quartz的任务调度监控管理平台设计源码

    本源码为基于Spring和Quartz的任务调度监控管理平台设计,共包含553个文件,其中css文件190个,png文件111个,java文件96个,js文件63个,sql文件22个,html文件20个,jsp文件17个,gif文件15个,xml文件9个,...

    spring任务调度(Quartz )

    3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...

    spring+mybatis+quartz任务调度实例和spring+quartz任务调度实例

    里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例

    Spring quartz 定时任务调度

    Spring 提供了对Quartz的全面支持,可以通过Spring的JobDetail和Trigger接口来配置和管理定时任务。通过在Spring的配置文件中定义bean,可以轻松地将Quartz任务纳入Spring的管理范围。 3. **中文注解** 在项目中...

    spring+quartz任务调度代码版

    通过对这些文件的深入学习和理解,你可以掌握如何在Spring环境中配置和使用Quartz进行任务调度,这对于构建有定时任务需求的应用程序非常有帮助。这个项目提供了实践经验,有助于开发者提升在企业级应用开发中的技能...

    基于Spring Boot的Quartz任务调度系统.zip

    基于Spring Boot的Quartz任务调度系统 项目概述 本项目是一个基于Spring Boot和Quartz的任务调度系统,旨在提供灵活的任务管理和调度功能。系统支持多种任务类型,包括Cron表达式任务和单次时间任务,并提供了丰富...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,用于按预定的时间间隔执行特定的任务,例如数据同步、报表生成、清理过期数据等。本项目名为“schedule-...

    Spring整合任务调度框架Quartz

    Spring 整合任务调度框架 Quartz 在软件开发中,任务调度框架是非常重要的一部分,它可以帮助开发者更好地管理和执行各种任务。在 Java 领域中,Quartz 是一个非常流行的任务调度框架,而 Spring 是一个非常流行的 ...

    spring quartz 任务调度

    Spring框架作为一个全面的企业级应用开发解决方案,提供了强大的任务调度支持,而Quartz则是一个流行的开源作业调度库,能够与Spring很好地集成。现在,我们就来深入探讨"spring quartz 任务调度"这一主题。 首先,...

    spring-quartz定时任务小实例

    通过配置`autoStartup="true"`,可以在Spring应用启动时自动调度任务。 7. **运行实例**:项目中的"timedTask项目说明.txt"很可能是详细步骤或代码示例,指导你如何运行这个实例。"timedTask"可能是项目的源代码...

    spring集成quartz 任务调度

    Spring集成Quartz是一款高效的任务调度框架,用于在Java应用程序中执行计划、周期性的任务。Quartz与Spring的结合,使得我们可以充分利用Spring的依赖注入(DI)和AOP特性,简化了任务调度的复杂性。 首先,Quartz...

    Spring下使用Quartz任务调度

    这篇博客“Spring下使用Quartz任务调度”将深入探讨如何在Spring环境中集成并使用Quartz进行任务管理。 Quartz是一个开源的作业调度框架,它可以被用来创建、调度和执行任务,支持复杂的调度策略。其核心特性包括可...

    Spring Quartz 任务调度实例

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...

    spring+quartz 动态任务方案

    ### Spring + Quartz 动态任务方案详解 #### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、...

    quartz 定时任务调度

    Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...

    利用Quartz实现任务调度的集群

    Quartz的核心优势在于其灵活性和简单性,允许开发者自由定义任务触发的时间表,并且支持任务和触发器的映射。此外,它还具备调度现场的持久化能力,即使系统崩溃,也能恢复任务调度的状态。 在Quartz集群中,每个...

    Spring Quartz 任务调度

    **Spring Quartz 任务调度** Spring Quartz 是一个基于 Java 的任务调度框架,它允许开发者定义定时任务并在应用程序中灵活地调度这些任务。这个框架是 Spring 和 Quartz Scheduler 的集成,提供了与 Spring 框架的...

    spring 任务调度

    - **Quartz简介**:Quartz是一个开源的作业调度框架,支持复杂的调度策略,如按日期、时间间隔或CRON表达式调度任务。 - **Spring与Quartz集成**:Spring通过`org.springframework.scheduling.quartz`包提供了一种...

Global site tag (gtag.js) - Google Analytics