Quartz是一個開源的定時調度框架,支持集羣部署。咱們能夠經過其Java API來使用它,或者經過Spring來配置與管理,也能夠結合使用兩種方式。本文重點分析Quartz2.2.3與Spring4.3.0.RELEASE集成時的初始化過程。java
與Spring集成時一般須要在Spring配置文件中加入SchedulerFactoryBean這個工廠Bean,例如:spring
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="overwriteExistingJobs" value="true"/> <property name="configLocation" value="classpath:quartz.properties"/> </bean>
再來看看SchedulerFactoryBean的類定義:框架
public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean<Scheduler>, BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle {
從中看到其實現了FactoryBean、BeanNameAware、ApplicationContextAware、InitializingBean、DisposableBean等經常使用接口,這些接口的具體意義本文不做贅述,不瞭解的能夠專門研究下Spring的原理和源碼實現。根據Spring的原理咱們知道,若是Bean自己實現了InitializingBean接口,那麼在Spring加載解析BeanDefinition,並初始化Bean後會調用SchedulerFactoryBean的afterPropertiesSet方法,這裏只會挑出其中的關鍵代碼進行分析。spa
在afterPropertiesSet中首先會初始化SchedulerFactory,代碼以下:code