为了账号安全,请及时绑定邮箱和手机立即绑定

quartz 和springmvc 是一个jvm吗?

/ 猿问

quartz 和springmvc 是一个jvm吗?

JVM
收到一只叮咚 2018-10-17 14:09:49

quartz 和springmvc 是一个jvm吗


查看完整描述

1 回答

?
一只名叫tom的猫

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都会指向它罢了,而这个调度会包含了其它所有调度中的任务。


查看完整回答
反对 回复 2018-11-08
  • 1 回答
  • 0 关注
  • 440 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信