Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

OriginNull/SolrIndexControl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

8 Commits

Repository files navigation

SolrIndexControl

基于solr的全量索引更新和增量索引更新的动态定时任务实现

利用Quartz和Spring进行整合处理,同时利用HttpClient来进行HTTP请求的处理

动态定时任务处理分析

四个核心接口:

くろまる Job
くろまる JobDetail
くろまる Trigger
くろまる Scheduler

三个核心概念: 任务、调度器、触发器

几个接口详解:

くろまる Job:任务的核心接口
只有这一个void execute(JobExecutionContext var1) throws JobExecutionException方法,需要实现该接口来定义需要执行的任务, JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap之中。

くろまる JobDetail:用来描述Job的实现类及其他相关的静态信息,如:Job名称、描述、关联监听器等信息
Quartz每次执行Job时,都重新创建一个Job实例。所以它不是直接接收一个Job实例,而是接收一个Job实现类,以便运行时通过newInstance()的反射调用机制实例化Job。
构造方法:public JobDetailImpl(String name, String group, Class<? extends Job> jobClass)
|- Job名称,组名称,实现类

くろまる Trigger:用来描述触发Job执行的时间触发规则。主要有SimpleTrigger(间隔调度)和CronTrigger(CRON调度)两个子类。

くろまる Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail可以注册到Schduler之中,二者在Scheduler中拥有各自的组及名称。
组及名称是Scheduler查找定位容器中某一对象的依据,Trigger的组及名称的组合必须唯一,JobDetail的组及名称的组合也必须唯一(但是可以和Trigger的组合名称相同,因为他们是不同类型的,处在不同的集合中)。可以对Job和Trigger进行相关控制。

くろまる Scheduler定义了多个接口方法,运行外部通过组及名称访问和控制容器中的Trigger和JobDetail。Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger被重复,对应的Job就被执行。一个Job对应多个Trigger,但一个Trigger只能对应一个Job.可以通过SchedulerFactory创建一个Scheduler实例。Scheduler拥有一个SchedulerContext,保存着Scheduler上下文信息,可以按照ServletContext来理解SchedulerContext.Job和Trigger都可以访问SchedulerContext内的信息。SchedulerContext为保存和获取数据提供了多个put()和getXXX()方法.

くろまる ThreadPool:Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程来提高运行效率。

Spring提供的支持:

くろまる 为Quartz的重要组件提供更具Bean风格的扩展类
くろまる 提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期执行启动和停止的动作。

JobDetail ---------- JobDetailFactoryBean
MethodInvokingJobDetailFactoryBean
SimpleTrigger ----------- SimpleTriggerFactoryBean
CronTrigger --------------- CronTriggerFactoryBean
SchedulerFactory ----------- SchedulerFactoryBean

需求:可以动态的进行任务的控制,暂停旧的任务,开启新的任务,删除旧的任务... 总之,任务现在是活的

动态定时任务实现思路:

思路一:不结合Spring,单纯的利用Quartz提供的类进行实现。

 1 利用实现Job来定义定时任务
 2 利用JobDetail对任务的实现类及其他相关的静态信息进行描述
 3 利用Trigger进行任务的触发控制(间隔控制、CRON控制)
	|- 此处可以自己手工调用CronTrigger接口或者SimpleTrigger接口的方法进行实现,也可以自己重新创建自己特色的方法
	(它俩内部Quartz针对于间隔调度和CRON调度进行了具体类的控制实现,具体细节可以参看源代码)
 4 利用Scheduler进行任务的调度处理,主要进行一些特定的配置文件的处理(集群信息、调度器线程池、任务调度现场数据的保存(默认保存在内存之中,可以进行配置将其保存在数据库之中))

思路二:利用Spring给Quartz提供的注入Bean进行配置实现(依旧是Quartz的内容,不过是做了一层的封装)
整体执行流程:任务 - 触发器 - 调度器

 1 利用实现Job来定义定时任务,通过JobExecutionContext来获取Spring上下文,从而通过自定义的调度器来进行任务的操作
 2 配置JobDetailFactoryBean,配置SchedulerFactoryBean进行Quartz相关配置文件的设置
 3 进行触发器的设置,之后任务就开始执行了。

About

Solr的动态定时任务(全量索引更新和增量索引更新)控制实现

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /