1. TaskSchdule
1.1. 主要完成Task的调度函数
1.2. 会读取agent.properties中的配置文件
1.2.1. org.quartz.scheduler.instanceName 要配置成IP地址,这样才能和测试平台关联使用
1.2.2. org.quartz.threadPool.threadCount 配置的线程数量,不过如果使用silktest的, 都是串行,这里配置再多也只有一个silktest在执行
1.2.3. org.quartz.jobStore.misfireThreshold 触发器过期时间,如果一个触发器本来要在指定时间执行, 但是由于阻塞等原因没有执行,等待这个时间后,该触发器就失效了。
1.2.4. org.quartz.dataSource.aiga agent.testplatform.data 目前由于调度器数据库和平台数据库使用的是一个数据库所以两个都要配置, 配置成一样的地址即可
1.2.5. agent.project.diretory = c:/test_project 工程下载的默认路径,根据需要进行配置
1.2.6. job.silktest.exec.overtime(秒为单位) 这个是silktest在执行的过程中,会去读取日志文件的更新状态, 如果超过这个设置项设置的时间,日志文件依然没有更新, 则认为silktest已经死掉,就会关闭silktest,进行下一个任务
1.3. 将所有的监听器加入任务
1.4. 含有addTask增加任务的函数
2. Daemon
2.1. AgentDaemon
2.1.1. Agent的主要守护进程
2.2. SchdulerDaemon
2.2.1. 调度器守护进程
2.3. JettyDaemon
2.3.1. Web服务守护进程
2.3.2. 主要提供的对外的接口 接口返回的都是JSON对象
2.3.2.1. PlanSync(plan_sync)
2.3.2.1.1. 用于同步计划到agent
2.3.2.2. AgentState(get_state)
2.3.2.2.1. 返回agent的状态
3. Task
3.1. 在Agent的执行单元以一个Task为单位
3.2. Task可以建立多种类型,但是都必须继承自BaseTask
3.3. Task中的函数
3.3.1. 然后一个Task拥有两个构造函数
3.3.1.1. 无参数构造函数
3.3.1.1.1. 注意:继承BaseTask的任何Task都必须重写该构造函数
3.3.1.1.2. 在任务执行的时候,并不会使用我们自己构建的Task对象,而是根据调度器需要使用“无参数构造函数”重新构建对象。
3.3.1.2. 使用生成器构造函数
3.3.1.2.1. 使用生成器构造函数,需要传入一个集成BaseParameterBuilder的生成类对象
3.3.1.2.2. Task应根据生成类对象中提供的generateTrigger()和generateJobDetail()方法,来构建Task对象
3.3.1.2.3. 任务一般按照Task的类型建立,也就是一个Task类型会建立一个Job
3.3.2. Task中的execute函数
3.3.2.1. 此函数是任务执行的函数,其中可以通过 context.getTrigger().getJobDataMap() 获取触发器重的数据
3.3.3. Task中的interupt函数
3.3.3.1. 此函数是在任务在被中断的时候执行的
3.3.3.2. Task类应重写该方法,在方法内部先进行跟此Task类执行相关的中断操作, 再执行super.interrupt
3.3.4. Task中的Before/After函数
3.3.4.1. 在任务开始执行和执行结束后进行的操作
3.3.4.2. 注意:这两个操作并没有占用执行线程,而是占用的是调度器线程 所以在这两个函数中不要进行大量的操作以防影响整个调度器执行
3.4. Task有两个重要是组成部分
3.4.1. Job(JobDetail)
3.4.1.1. Job在Task中保存,只保存jobDetail
3.4.1.2. Job是任务执行实体
3.4.1.3. Job有Key值,用于唯一确定内存或者数据库中的Job,Key是有name和group两个字符串组成的
3.4.1.4. 在建立Task可以使用两个标签来修饰Job
3.4.1.4.1. @DisallowConcurrentExecution
3.4.1.4.2. @PersistJobDataAfterExecution
3.4.1.5. Job中可以保留数据
3.4.1.5.1. Job中可以保留数据,但是由于一种Task只有一个Job,所以一般保留公共数据,不会保留task中执行的相关数据
3.4.1.6. 数据库中对应的表名为:QRTZ_JOB_DETAILS
3.4.2. Trigger
3.4.2.1. 可翻译为触发器,是任务的执行都是需要在触发器在受到调度器调度后调起执行的
3.4.2.2. Trigger分为三种类型
3.4.2.2.1. 简单类型simple(INSTANT)
3.4.2.2.2. 日期类型CALENDAR
3.4.2.2.3. 定时类型CRON
3.4.2.3. Trigger状态
3.4.2.3.1. 调度器里Trigger状态
3.4.2.3.2. 在数据库中Trigger表的状态
3.4.2.3.3. 对应数据库的表为QRTZ_TRIGGERS
3.4.2.3.4. Tigger可以保存数据,任务执行的数据会保存在这里, 在触发器触发的时候,根据触发器中的数据进行任务执行。
3.4.2.3.5. Trigger与Task是一一对应的关系
3.5. 有三种执行类型,这三种执行类型同Task中的Trigger类型 (参看:ITASK中定义ExecutionType)
3.6. Task中基本的监听器
3.6.1. 超时控制监听器:TaskTimeOutListener
3.6.1.1. 在任务启动的时候会建立一个线程,线程体主要是等待“超时设定的时间”
3.6.1.1.1. 如果线程等待了足够的时间,任务没有结束,将执行任务的interupt函数
3.6.1.1.2. 如果任务结束了,等待线程没有关闭,则执行等待线程的interupt函数,停止等待
3.6.2. After/Before函数监听器:BeforeAndAfterTaskListener
3.6.2.1. 实现了Task类中的BEFORE和AFTER函数的执行
3.6.3. 日志写入监听器:TaskLogListener
3.6.3.1. 在任务执行完了,将执行结果记录到日志表中