【源码修改】xxljob不使用@xxljob注解实现定时任务

不入侵业务代码使用xxljob定时任务2.3.0

xxl-job-core 
1.ExecutorBizImpl
新增private JobHandlerGenerator jobHandlerGenerator = new XxlJobHandlerGenerator();
源码 run方法改 IJobHadeler newJobHandler = this.jobHandlerGenerator .loadJobHandler(triggerParam);
2.TriggerParam
新增private String executorHandlerMethod; set,get,toString方法
3.新增XxlJobAirEExecutorpublic class XxlJobAirExecutor extends XxlJobSpringExecutor{
	private static final Logger LOGGER = LoggerFactory.getLogger(XxlJobAirExecutor.class);
	private static ApplicationContext applicationContext;
	@Override
	public void afterSingletonsInstantiated(){
		super.afterSingletonsInstantiated();
	}
	private static ConcurrentMap<String,IJobHandler> airJobHandlerRepository = new ConcurrentHashMap<>();
	//获取jobhandler jobhandler名称 执行方法名称
	public static IJobHandler loadJobHandler(String jobHandler,String executeMethod){
		return airJobHandlerRepository.computeIfAbsent(creatJobHandlerFlag(jobHandler,executeMethod),
		key->doCreatAirJobHandler(jobHandler,executeMethod));
	}
	pirvate static String creatJobHandlerFlag(String jobHandler,String executeMethod){
		return jobHandler + "#" + executeMethod;
	}
	//创建AirJobHandler
	private static AirJobHandler doCreatAirJobHandler(String jobHandler,String executeMethod){
		try{
			Object handler = applicationContext.getBean(jobHandler);
			Method method = ReflectionUtils.findMethod(handler.getClass(),executeMethod);
			LOGGER.info(">>xxl-job register jobhandler success,name:{},jobHandler:{}",jobHandler,executeMethod);
			return new AirJobHandler(handler,method);
		}catch(Exception e){
			LOGGER.error("找不到jobhandler");
			return null;
		}
	}
	@Override
	public void destroy(){super.destroy();}
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throw BeansException{
		XxlJobAirExecutor.applicationContext=applicationContext;
		super.setApplicationContext(applicationContext);
	}
		
}
4.新增JobHandlerGenerator接口
public interface JobHandlerGenerator{
	IJobHandler loadJobHandler(TriggerParam triggerParam);
}
5.新增XxlJobHandlerGeneratorpublic class XxlJobHandlerGenerator{
	@Override
	public IjobHandler loadJobHandler(TriggerParam triggerParam){
		String handler = triggerParam.getExecutorHandler();
		String method = triggerParam.getExecutorHanlerMethod();
		return StringUtils.hasText(method) ? XxlJobAirExecutor.loadJobHandler(handler,method):XxlJobExecutor.loadJobHandler(handler);
	}
}
6.新增AirJobHandler
public class AirJobHandler extends IJobHandler{
	private final Object target;
	private final Method executeMethod;
	public AirJobHandler(Objcet target,Method executeMethod){
		this.target = target;
		this.executeMethod = executeMethod;
	}
	@Override
	public void execute() throws Exception{
		Class<?>[] paramTypes = executerMethod.getParameterTypes();
		if(paramTypes.length>0){
			executeMethod.invoke(target,new Object[paramTypes.length]);
		}else{
		executeMethod.invoke(target);
		}
	}
}
xxl-job-admin
1.XxlJobInfo修改
新增 private String executorHandlerMethod;  get,set
2.XxlJobTrigger修改
新增triggerParam.setExecutorHanlerMethod(jobInfo.getExecutorHandlerMethod);
3.XxlJobInfoMapper.xml
save update 新增 excutor_handler_method
4.XxlJobServiceImpl
276行 exists_jobInfo.setExecutorHandlerMethod(jobInfo.getExecutorHandlerMethod());

sql xxl_job_info 表
新增excutor_handler_method字段

jobinfo.index.ftl
job新增、更新中 增加 executorHandlerMethod

jobinfo.index.1.js
update方法中 565行新增executeHandlerMethod回显

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xxl-job 是一个分布式任务调度平台,可以用于实现定时任务。下面是实现定时任务的步骤: 1. 配置 xxl-job 平台:首先,你需要下载 xxl-job源码,然后按照官方文档进行配置和部署。配置主要包括数据库连接、日志文件路径、调度中心地址等。 2. 创建任务:在 xxl-job 的调度中心页面上,你可以创建一个任务。任务的配置包括任务名称、任务描述、Cron 表达式(用于指定任务的触发时间)、路由策略(用于指定任务在集群中的执行机器选择策略)等。 3. 开发任务代码:在你的项目中,你需要编写具体的任务代码xxl-job 提供了一些接口,你可以实现其中的 `IJobHandler` 接口,并在 `execute` 方法中编写任务逻辑。 4. 注册任务:在你的代码中,你需要使用 xxl-job 提供的注解 `@XxlJob` 来标记任务方法。这样,xxl-job 调度中心就能够找到该方法。 5. 配置执行器:在 xxl-job 的调度中心页面上,你需要配置执行器信息,包括执行器名称、执行器地址等。执行器用于指定任务具体在哪台机器上执行。 6. 启动调度中心和执行器:启动 xxl-job 的调度中心和执行器,确保它们能够正常运行。 7. 监控任务执行情况:在 xxl-job 的调度中心页面上,你可以查看任务的执行情况,包括任务的触发时间、执行结果等。 通过以上步骤,你可以实现定时任务的调度和执行。xxl-job 还提供了一些高级特性,如任务日志、报警机制等,可以根据实际需求进行配置和使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值