前言:
虽然在网上已经有帖子实现了动态设定 spring quartz trigger 参数的动态设定了,如:
http://hi.baidu.com/vip099/blog/item/51bbb03d555f5702bba16766.html
我在看完这些帖子之后,感觉有些实现的代码是多余,故将我的改进版特征如下:
总结
1 、 Quartz 既然和 Spring 整合了,那么就不用考虑什么低侵入设计了,最好能够最大化利用 Spring 的特性。
2 、在 SpringQuartz 中,开发者不需要像在纯 Quartz 那样关心 Trigger 、 Job 、 JobDetail 的关联关系和生命周期了,一切有 Spring 搞定。
3 、 Spring 中的 SimpleTriggerBean 和 CronTriggerBean 分别继承了 Quartz 中 SimpleTrigger 和 CronTrigger ,并且实现了 BeanNameAware 、 JobDetailAwareTrigger 、 InitializingBean 接口。
实现 BeanNameAware :获取 xml 配置文件中的 bean id 并且设值为 beanName ,设定其他的参数属性。
实现 InitializingBean :如果这个 CronTriggerBean(SimpleTriggerBean) 实例的 triggrName 没有设置,那么在 afterPropertiesSet() 方法中将 beanName 设定为 triggerName
实现 JobDetailAwareTrigger : SpringQuartz 入口 SchedulerFactoryBean 会自动探测、设定 trigger 、 jobDetail 的关系,通过这个接口获取 Trigger 实例相应的 jobDetail 。
4 、 QuartzJobBean 实现 Job 接口,在 job.execute 调用 executeInternal 抽象方法。如果需要实现stateful job,那么在QuartzJobBean的子类中实现StatefulJob接口就可以了。
5 、关于 SimpleTriggerBean : Spring 的 SimpleTriggerBean 的新加的时间参数为: startDelay 。根据 startDelay 来确定 SimpleTrigger 的 startTime :
如果重新设定时间,那么只需要重新设定 startTime 和 repeatInterval 就可以了,不用处理 startDelay 。