如何使用xxl-job,如何使用xxl-job实现

本文介绍了如何使用Spring Boot和XXL-Job框架实现对外统一接口,通过IJobHandler和自定义JobHandler,配合DataSync接口与具体实现类,实现实时或定时同步数据中心的数据。重点讲解了如何配置和调用不同业务操作,以及可视化平台的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 同步对外统一的接口

public class SyncController {

    @Autowired
    // 注入ApplicationContext的Bean工厂类
    private ApplicationContext applicationContext;

    /**
     *
     * @param jobName 
     * @param executeParam
     * @return
     * @throws Exception
     */
    @GetMapping("/baseDataSync")
    public ReturnT<String> baseDataSync(@RequestParam String jobName, 
   										@RequestParam String executeParam) throws Exception {
    	// 通过ApplicationContext根据类的全限定名获取IJobHandler对象实例
        IJobHandler jobHandler = (IJobHandler) applicationContext.getBean(jobName);
        
        return jobHandler.execute(executeParam);
    }

}

1. 相关入参

  • jobName:ApplicationContext需要根据这个jobName获取实例,之后才能调用对应的execute方法。
  • executeParam:执行的方法

jobHandler的execute方法只能接收String类型的入参,所以我们需要把传过来的executeParam封装成一个String

2. IJobHandler抽象类(xxl-job自带的)

IJobHandler类是xxl-job自带的一个JOB执行器的抽象类,源码如下:

package com.xxl.job.core.handler;

import com.xxl.job.core.biz.model.ReturnT;

import java.lang.reflect.InvocationTargetException;

/**
 * job handler
 *
 */
public abstract class IJobHandler {

	// 成功标志
	public static final ReturnT<String> SUCCESS = new ReturnT<String>(200, null);
	// 失败标志
	public static final ReturnT<String> FAIL = new ReturnT<String>(500, null);
	// 超时失败标志
	public static final ReturnT<String> FAIL_TIMEOUT = new ReturnT<String>(502, null);

	/**
	 * execute handler, invoked when executor receives a scheduling request
	 *
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public abstract ReturnT<String> execute(String param) throws Exception;

	// 初始化执行器的时候操作
	public void init() throws InvocationTargetException, IllegalAccessException {
	}
	// 销毁执行器前进行的操作
	public void destroy() throws InvocationTargetException, IllegalAccessException {

	}
}

我们需要继承IJobHandler实现我们自定义的JobHandler

3. 自定义JobHandler(继承IJobHandler抽象类)

继承IJobHandler抽象类。需要重写其抽象方法execute

@Component
public class BaseDataSyncHandler extends IJobHandler {

    @Resource
    private ApplicationContext applicationContext;

	// 这里定义的value值可以在xxl-job的可视化平台上去配置
	@XxlJob(value = "baseDataSyncHandler") 
    public ReturnT<String> execute(String executeParam) throws Exception {
     	
     	// DataSync是一个接口,executeParam是具体的实现类的名称
     	DataSync dataSync = applicationContext.getBean(executeParam, DataSync.class);
     	
     	// 记录开始之间
		long startTime = System.currentTimeMillis();
		
		// executeParam指定的实现类调用对应的sync方法
		dataSync.sync();
		long endTime = System.currentTimeMillis() - startT;
		XxlJobLogger.log("本次执行耗时:{}ms", endTime - startTime);
	}

如果只是需要将一个方法采用定时任务的形式的话,写到这里就OK了,execute方法里面只要写具体的实现操作就可以,

但是对于同步数据中心的情况,可能在数据中心有非常多的表是要同步的,对于这种情况,可以用同一个JobHandler,定义一个统一访问的DataSync类,入参是具体的实现类名称,这样就可以调用入参指定的方法

4. 定义一个数据同步的接口DataSync

public interface DataSync {

	// 定义一个实现类
	boolean sync(); 
}

5. 编写具体实现类(实现DataSync)

这个类就是用来开发实际的业务操作了,比如同步数据中心接口的操作

@Component("testDataSync")
@Slf4j
public class TestDataSync implements DataSync {

	@Resource
    private FeignService feignService;

	/**
	* 具体的实现方法(如:调用三方接口获取数据、调用失败异常处理、数据落库、打印日志等)
	*/
	public boolean sync() {
		
		...
		
		// 通过Feign调用的方式从数据中心获取数据
		feignService.invoke();
		
		...
	}
}

6. 可视化操作界面

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值