spring中的quartz调度问题

 

1、SchedulerFactoryBean会自动启动。

当在spring文件中定义了多个SchedulerFactoryBean实例时,一定要小心,因为这些ScheduleFactoryBean自从load进程序里,就会自动启动。如果要手动控制,注意要将autoStartup属性设置为false

 

2、SchedulerFactoryBean暴露的是Scheduler,而不是SchedulerFactoryBean。

SchedulerFactoryBean实现了FactoryBean接口,必须实现两个方法,一个是getObjectType,另外一个则是getObject;其中getObjectType定义了返回的类型应该为Scheduler,而getObject指定了返回的是其一个重要属性scheduler,这个scheduler就是我们要获得的调度。

 

若在配置文件里为SchedulerFactoryBean定义了id属性为"scheduler",则在程序里调用getBean时,需要注意getBean("scheduler")返回的是Scheduler对象

 

3

SchedulerFactoryBean中有两个很重要的属性,一个是scheduler,另外一个是schedulerFactoryClass,spring通过用schedulerFactoryClass做代理来产生调度,并把它赋给scheduler

 

private Class schedulerFactoryClass = StdSchedulerFactory.class;

//如果你没有指定schedulerFactoryClass ,那么它用的是quartz中自带的调度工厂,

this.scheduler = createScheduler(schedulerFactory, this.schedulerName);

//这里的schedulerName默认传进来是空的,其实如果你不是用自己定义的schedulerFactoryClass

//恐怕也没有什么意义,因为createScheduler是这样调用的

return schedulerFactory.getScheduler();

//显然schedulerName并没有用到,除非是你自行写一个schedulerFactory,并做好相应处理,

//否则返回的这个scheduler一定是一个指定名称的调度

Scheduler sched = schedRep.lookup(getSchedulerName());

//这个sched就是要代理生成的scheduler,getSchedulerName只有一句话,如下:

cfg.getStringProperty(PROP_SCHED_INSTANCE_NAME,"QuartzScheduler");

//如果我们没有使用一些特殊的机制,那么返回的只能是一个固定的字符串。

 

如上说述,如果我们希望不进行改造,就在spring的配置文件中定义多个调度的方法来实现我们个性化的任务安排时,可能并不可行。因为spring配置的scheduler只能有一个,即使你定义了多个调度,那么其实实现的只有一个,只是所有你希望指向不同调度的id都会指向它罢了,而这个调度会包含了其它所有调度中的任务。

 

 

4、抱错:org.quartz.SchedulerException: Repeat Interval cannot be zero

场景:该错误通常是在引用了SimpleTriggerBean的时候没有为repeatCount和repeatInterval赋值发生的,很奇怪,SimpleTriggerBean有一个空构造函数,在里面直接为repeatCount赋了一个REPEAT_INDEFINITELY,这样,当其进入validate函数时,会抱错。而quartz中的SimpleTrigger这两个属性默认值均为0,不懂spring中为何这样处理。

 

5quartzcrontab的区别

aquartz属于用户级别,crontab则属于系统级别;

bquartz调度的线程,所有线程共享一个jvmcrontab调度的则是应用,每个应用都独立的占用资源。

 

6quartz中加入并发多线程分析

aquartz本身是有线程池支持的,这个可以用org.quartz.threadPool.threadCount属性来设置线程池大小,quartz的任务可以由quartz的线程池自动调度

b、对每个任务也可能起多线程,但是需要对并发数量做控制,可以考虑使用commons-pools提供的对象池机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值