`
jiagyao
  • 浏览: 99377 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

解析spring schedule (转)

阅读更多
Spring在schedule这块支持JDK Timer、concurrent、quartz三种,这三种任务调度方案在实现机制和调用方法上都不同,但spring通过对其包装,使得基于spring能用统一的配置和编码风格来使用这三种schedule方案。

总得来说这三种schedule都是基于scheduler->trigger->job的基本流程,因此spring通过TimerFactoryBean、ScheduledExecutorFactoryBean和SchedulerFactoryBean分别实现JDK Timer、concurrent和quartz的基本流程。主要逻辑如下代码所示:

TimerFactoryBean

view plaincopy to clipboardprint?
public void afterPropertiesSet() {  
        logger.info("Initializing Timer");  
        this.timer = createTimer(this.beanName, this.daemon);  
        // Register specified ScheduledTimerTasks, if necessary.  
        if (!ObjectUtils.isEmpty(this.scheduledTimerTasks)) {  
//注册task和timer          registerTasks(this.scheduledTimerTasks, this.timer);  
        }  
    } 
public void afterPropertiesSet() {
logger.info("Initializing Timer");
this.timer = createTimer(this.beanName, this.daemon);
// Register specified ScheduledTimerTasks, if necessary.
if (!ObjectUtils.isEmpty(this.scheduledTimerTasks)) {
//注册task和timer registerTasks(this.scheduledTimerTasks, this.timer);
}
}

ScheduledExecutorFactoryBean

view plaincopy to clipboardprint?
public void afterPropertiesSet() {  
        if (logger.isInfoEnabled()) {  
            logger.info("Initializing ScheduledExecutorService" +  
                    (this.beanName != null ? " '" + this.beanName + "'" : ""));  
        }  
        ScheduledExecutorService executor =  
                createExecutor(this.poolSize, this.threadFactory, this.rejectedExecutionHandler);  
        // Register specified ScheduledExecutorTasks, if necessary.  
        if (!ObjectUtils.isEmpty(this.scheduledExecutorTasks)) {  
            registerTasks(this.scheduledExecutorTasks, executor);  
        }  
        // Wrap executor with an unconfigurable decorator.  
        this.executor = (this.exposeUnconfigurableExecutor ?  
                Executors.unconfigurableScheduledExecutorService(executor) : executor);  
    } 
public void afterPropertiesSet() {
if (logger.isInfoEnabled()) {
logger.info("Initializing ScheduledExecutorService" +
(this.beanName != null ? " '" + this.beanName + "'" : ""));
}
ScheduledExecutorService executor =
createExecutor(this.poolSize, this.threadFactory, this.rejectedExecutionHandler);
// Register specified ScheduledExecutorTasks, if necessary.
if (!ObjectUtils.isEmpty(this.scheduledExecutorTasks)) {
registerTasks(this.scheduledExecutorTasks, executor);
}
// Wrap executor with an unconfigurable decorator.
this.executor = (this.exposeUnconfigurableExecutor ?
Executors.unconfigurableScheduledExecutorService(executor) : executor);
}

SchedulerFactoryBean

view plaincopy to clipboardprint?
public void afterPropertiesSet() throws Exception {  
    .....  
        // 初始化sceduler  
        initSchedulerFactory(schedulerFactory);  
        this.scheduler = createScheduler(schedulerFactory, this.schedulerName);  
                //注册listener、trigger和job  
        registerListeners();  
        registerJobsAndTriggers();  
       ......  
                //启动scheduler  
        startScheduler(this.scheduler, this.startupDelay);  
       ......  
        }  
    } 
public void afterPropertiesSet() throws Exception {
.....
// 初始化sceduler
initSchedulerFactory(schedulerFactory);
this.scheduler = createScheduler(schedulerFactory, this.schedulerName);
                //注册listener、trigger和job
registerListeners();
registerJobsAndTriggers();
       ......
                //启动scheduler
startScheduler(this.scheduler, this.startupDelay);
       ......
}
}

顺着scheduler->trigger->job的思路,Spring又分别对JDK Timer、concurrent、quartz的trigger进行了封装,暴露出时间调度的配置参数,三种封装类分别为ScheduledTimerTask、ScheduledExecutorTask和CronTriggerBean+SimpleTriggerBean。三种trigger封装类分别根据实现机制的特点暴露出时间调度配置并串联起scheduler和具体job任务



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cutesource/archive/2009/11/29/4900020.aspx
分享到:
评论

相关推荐

    springboot动态配置定时任务(schedule)

    为了实现动态配置,我们可以使用`@ConfigurationProperties`注解解析配置文件中的定时任务参数,然后通过`@EnableScheduling`开启定时任务调度器: ```java import org.springframework.boot.context.properties....

    spring的bean加载顺序样例项目

    - 当Spring容器启动时,它首先读取配置文件,解析Bean的定义,并创建一个BeanDefinition对象,该对象包含了Bean的所有信息,如类名、属性、依赖等。 - 如果有`@Component`注解的类,Spring会通过组件扫描找到并...

    spring动态定时器封装

    6. **源码解析**:理解Spring和Quartz的源码有助于我们更深入地掌握它们的工作原理。例如,`ScheduledTaskRegistrar`类是Spring调度的核心,它负责将`@Scheduled`注解的bean注册到Quartz的Trigger中。而`...

    使用Spring Task开发定时任务的Demo

    **Spring Task 深度解析与实战应用** Spring Task,也称为Spring的内置任务调度框架,是Spring Framework的一部分,它提供了在Spring应用中定义和执行定时任务的能力。这个功能强大的工具使得开发者无需依赖外部...

    使用spring调度

    本篇文章将深入探讨Spring调度的使用,包括核心概念、配置方式以及源码解析。 1. **Spring调度核心组件** Spring调度主要由两个关键组件构成:`TaskScheduler`和`ThreadPoolTaskScheduler`。`TaskScheduler`是...

    SpringBoot配置及使用Schedule过程解析

    SpringBoot配置及使用Schedule过程解析 SpringBoot是一款流行的Java框架,提供了许多实用的功能,其中Schedule功能是其中之一。Schedule功能允许开发者创建周期性定时任务,以便在特定的时间点或间隔执行特定的任务...

    spring+quartz 动态任务方案

    以下是对这部分代码的具体解析: ##### 3.1 DispatchJobServlet 类分析 ```java public class DispatchJobServlet extends HttpServlet { private ApplicationContext ctx; public DispatchJobServlet() { ...

    Spring中配置定时器详解.doc

    本文将深入解析Spring中配置定时器的方法,帮助读者理解和掌握如何在Spring环境中设置定时任务。 ### 一、Spring定时器基本概念 Spring框架提供了多种方式来实现定时任务,包括基于`java.util.Timer`的`...

    springboot-task-starter.zip_grandfatherji1_spring_spring task 动态

    本文将详细解析"springboot-task-starter.zip_grandfatherji1_spring_spring task 动态"这个压缩包所涵盖的知识点,主要关注Spring Task如何实现动态添加定时任务。 首先,`pom.xml`文件是Maven项目的配置文件,它...

    spring之quartz定时器

    《Spring与Quartz定时器深度解析》 在Java开发领域,Spring框架因其强大的功能和灵活性而备受推崇。其中,Spring对任务调度的支持是其一大亮点,尤其与Quartz的集成,使得开发者能够方便地实现定时任务。Quartz是一...

    定时启动--启动按钮(spring注入)

    通过对给定文件中的信息进行解析,我们了解到了两种实现定时任务的方法:一种是基于 Java 标准库 `java.util.Timer` 的简单实现;另一种则是利用 Spring 框架集成 Quartz 实现更为复杂灵活的定时任务管理。这两种...

    spring定时调用以及设定时间调用包括jar和源码

    - Spring的`@Scheduled`注解处理逻辑,包括`ScheduledAnnotationBeanPostProcessor`类解析注解并生成`Trigger`。 - `TaskScheduler`接口的实现,如`ThreadPoolTaskScheduler`的源码,展示了如何创建线程池并调度任务...

    3. spring版 timer HelloWorld

    3. **配置定时任务**:接下来,在Spring的配置文件中,使用`taskScheduler` bean的`schedule`方法来配置定时任务。你可以指定一个`Trigger`对象来决定任务的执行频率,或者直接传入一个`Date`来指定首次执行时间。 ...

    java_Timer定时器实例_Spring实例

    以下是对该主题的详细解析: ### Java中的Timer定时器 #### Timer类概述 Java的`java.util.Timer`类用于调度线程在特定时间执行任务,它提供了两种任务执行方式:`schedule()`和`scheduleAtFixedRate()`。前者用于...

    uncode-schedule 学习

    通过阅读这篇文章,我们可以获得更具体的实践指导,例如如何集成Uncode Schedule到Spring Boot项目中,或者如何处理并发执行和异常处理。 在学习过程中,我们还需要了解相关的设计模式,如工厂模式用于创建作业和...

    Quartz Spring整合——附带webservice Demo

    8. **异常处理**:在Web服务调用中,应该处理可能出现的网络异常、解析异常等,确保任务的健壮性。 9. **日志和监控**:为了跟踪和调试,可以在Job执行前后记录日志,同时可以使用Quartz提供的监控工具或自定义监控...

    spring定时非常详细,有例子,超具体,需要的下载

    以下是对这些关键概念的深入解析: 1. **@Scheduled注解**: `@Scheduled`注解是Spring提供的用于标记在方法上,表示该方法应被定期执行。你可以通过设置不同的参数来定制定时规则,如`fixedRate`(周期性执行,...

    Spring Boot @Scheduled定时任务代码实例解析

    在Spring Boot应用中,我们可以利用`@Scheduled`注解来创建定时任务,这极大地简化了在Java中实现定时任务的复杂性。`@Scheduled`是Spring框架提供的一个用于执行周期性任务的注解,它可以在Spring管理的bean中使用...

    framework Schedule Quartz

    标题 "framework Schedule Quartz" 暗示我们讨论的是一个基于Quartz的调度框架。Quartz是Java领域中广泛使用的开源作业调度库,它允许开发者定义、调度和执行任务。Quartz能够按照预定的时间间隔或者特定的日期触发...

    springmvc基本配置及定时任务配置修改

    5. **调度 Job**:在 Spring 中,你可以使用 `Scheduler` 的 `scheduleJob()` 方法来安排 Job 的执行。 动态修改定时任务是 Quartz 的一个重要特性,这可以通过以下方式实现: 1. **更新 Trigger**:如果你想要改变...

Global site tag (gtag.js) - Google Analytics