说明文档
总体说明
任务中心在quartz的基础上进行包装与定制。主要提供如下功能:
- 通过注解和sdk两种方式注册任务
- 任务的misfired机制
- 任务的fail-over功能
- 通过运维页面进行任务的查看,启停编辑等。
- 查看任务最近10次的执行情况,及重新执行某次任务。
- 任务执行失败告警及任务misfired告警。
任务处理流程图
业务集成
业务侧需要添加如下maven依赖,引入任务管理客户端包。
<dependency>
<groupId>com.yoho.quartz</groupId>
<artifactId>yoho-quartz-client</artifactId>
<version>1.3.4-SNAPSHOT</version>
</dependency>
有两种任务注册方式
注解方式注册
注解为YhJobDef。注解中配置任务的相关信息,如执行时间,开始时间,结束时间,任务misfired策略,任务类型,任务执行的参数等。 定义如下:
public @interface YhJobDef {
/**
* 任务名称
*
* @return
*/
String jobName();
/**
* 任务分组
*
* @return
*/
String jobGroup() default "default";
/**
* 任务触发类型 0-crontrigger类型,1-simpletrigger类型
*
* @return
*/
JobType jobType() default JobType.CRON;
/**
* 执行周期 ,当为crontrigger类型时生效
*
* @return
*/
String cron() default "";
/**
* 任务misfired策略
*
* @return
*/
MisfiredPolicy misfiredPolicy() default MisfiredPolicy.SMART_POLICY;
/**
* 任务执行上下文
*/
String context() default "";
/**
* 开始时间 格式为yyyy-MM-dd HH:mm:ss ,当类型为1时有效
*
* @return
*/
String startDate() default "";
/**
* 重复次数,当任务类型为1时有效
*
* @return
*/
int repeatCount() default 0;
/**
* 重复间隔 ,当任务类型为1时有效
*
* @return
*/
int interval() default 0;
/**
* 任务优先级
*
* @return
*/
int priority() default 5;
/**
* 任务描述
*
* @return
*/
String desc() default "";
}
注解方式注册任务代码示例:
@Service
@YhJobDef(jobName = "CmbScheduleYhTask", cron = "0 15 2,3,4 * * ?", desc = "每天凌晨刷新招行公钥", misfiredPolicy = MisfiredPolicy.SMART_POLICY, jobType = JobType.CRON)
public class CmbScheduleYhTask implements YhJob {
private static final Logger cmbpayLogger = LoggerFactory.getLogger("cmbpayLogger");
@Autowired
private CmbNetpayService cmbpayService;
@Override
public void process(String s) {
cmbpayLogger.info("\n\n******************** CmbNetpay PublicKey");
cmbpayService.refreshCmbPublicKey();
cmbpayLogger.info("\n");
}
}
任务具体执行逻辑类需要定义成一个不同的spring的bean。
调用接口方式注册
通过接口的方式只需要调用JobOperatorService的createJob方法就可以将任务注册到任务中心。方法定义void createJob(JobDetail jobDetail , String channel) throws JobException
参数JobDetail对象为任务的定义。channel为任务注册的来源。即通过注解还是通过调用接口。枚举值为annotation和portal
。
代码示例:
@Resource(name = "jobOperatorService")
private JobOperatorService jobOperatorService;
/**
* 添加任务
*/
@RequestMapping("/job/createJob.do")
public JobResponse createJob(@RequestBody JobDetail jobDetail) {
JobResponse response = new JobResponse();
try {
jobOperatorService.createJob(jobDetail, Contants.ChannelType.TYPE_PORTAL);
response.setCode(ConstantEnum.JobResponse.SUCCESS);
response.setDesc("SUCCESS");
} catch (JobException e) {
response.setCode(ConstantEnum.JobResponse.FAIL);
response.setDesc(e.getMessage());
}
return response;
}
运维侧任务查看
运维侧提供页面查看任务执行状态及相关的任务操作。