solr java增量索引,GitHub - OriginNull/SolrIndexControl: Solr的动态定时任务(全量索引更新和增量索引更新)控制实现...

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提供的类进行实现。

① 利用实现Job来定义定时任务

② 利用JobDetail对任务的实现类及其他相关的静态信息进行描述

③ 利用Trigger进行任务的触发控制(间隔控制、CRON控制)

|- 此处可以自己手工调用CronTrigger接口或者SimpleTrigger接口的方法进行实现,也可以自己重新创建自己特色的方法

(它俩内部Quartz针对于间隔调度和CRON调度进行了具体类的控制实现,具体细节可以参看源代码)

④ 利用Scheduler进行任务的调度处理,主要进行一些特定的配置文件的处理(集群信息、调度器线程池、任务调度现场数据的保存(默认保存在内存之中,可以进行配置将其保存在数据库之中))

思路二:利用Spring给Quartz提供的注入Bean进行配置实现(依旧是Quartz的内容,不过是做了一层的封装)

整体执行流程:任务 - 触发器 - 调度器

① 利用实现Job来定义定时任务,通过JobExecutionContext来获取Spring上下文,从而通过自定义的调度器来进行任务的操作

② 配置JobDetailFactoryBean,配置SchedulerFactoryBean进行Quartz相关配置文件的设置

③ 进行触发器的设置,之后任务就开始执行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值