Java - XXL-JOB

说到定时任务想必每一个开发人员都不陌生,开启定时任务的方式也多种多样,如: @Scheduled,Quertz,Elastic-Job, xxl-job等。
xxl-job作为目前业界流行的分布式任务调度框架,受到越来越多的人的信任,越来越多的公司也接入了xxl-job作为定时任务统一调度中心。
想了解xxl-job的可以去github等平台学习。
在这里只介绍下项目中如何使用xxl-job,如何在任务管理界面配置定时任务。
xxl-job包依赖,maven引入

            
                com.xuxueli
                xxl-job-core
                2.0.2
            

代码集成,实现com.xxl.job.core.handler.IJobHandler重写execute(String s)方法制定执行规则。

/**
 * 任务BeanHandler
 * @author test
 */
@JobHandler(value="beanJobHandler")
@Component
@Slf4j
public class BeanJobHandler extends IJobHandler implements ApplicationContextAware {

	private ApplicationContext applicationContext;

	@Override
	public ReturnT execute(String param) throws Exception {
	    log.info("执行任务:{}", param);
		if(StringUtils.isEmpty(param)){
			return new ReturnT<>(ReturnT.FAIL_CODE, "参数不能为空");
		}
		String[] params = StringUtils.split(param, "#");
		if(params == null || params.length< 2){
			return new ReturnT<>(ReturnT.FAIL_CODE, "参数格式不正确,形如:com.test.job.BeanJobHandler#execute");
		}

		String beanClazzName = StringUtils.trimAllWhitespace(params[0]);
		String methodName = StringUtils.trimAllWhitespace(params[1]);

		Class taskBeanClazz = null;
		try {
			taskBeanClazz = Class.forName(beanClazzName );
		}catch (Exception e){
			log.error("执行任务失败:{},原因:Class不存在", param);
			return new ReturnT<>(ReturnT.FAIL_CODE, "类 " + beanClazzName + " 不存在");
		}

		Method taskExecMethod = null;
		try {
			taskExecMethod = taskBeanClazz.getMethod(methodName );
		}catch (Exception e){
			log.error("执行任务失败:{},原因:方法不存在", param);
			return new ReturnT<>(ReturnT.FAIL_CODE, "类 " + beanClazzName + " 中不存在" + methodName + "方法");
		}
		Object object = null;
		try {
			object = applicationContext.getBean(taskBeanClazz);
		}catch (Exception e){
			log.error("执行任务失败:{},原因:Bean不存在", param);
			return new ReturnT<>(ReturnT.FAIL_CODE, "不存在 " + beanClazzName + " 类型的Bean");
		}

		try {
			taskExecMethod.invoke(object);
		}catch (Exception e){
			log.error("执行任务失败:{}", param, e);
			return new ReturnT<>(ReturnT.FAIL_CODE, stackTraceAsString);
		}

		return new ReturnT<>(ReturnT.SUCCESS_CODE, "执行成功");
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) {
		this.applicationContext = applicationContext;
	}
}

管理界面如何配置:

  1. 配置执行器,模块名,模块的ip地址等
  2. 新增任务,配置任务执行规则

新增执行器:
Java - XXL-JOB_第1张图片
新增任务:
Java - XXL-JOB_第2张图片
注意事项:
3. 执行器: 选择对应的执行器,不然找不到对应的类和方法
4. cron: 定时任务执行规则
5. JobHandler: @JobHandler(value=“beanJobHandler”) 和运行模式需要一致

以上就是java 模块配置xxl-job,这里比较简单,只记录了如何使用,如何配置,作为一个参考依据,具体的操作还需要大家亲自实践,有疑问可以在评论区留言,欢迎各位指正。

你可能感兴趣的:(分布式,java,定时任务)