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

2023-10-29

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. 可视化操作界面

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用xxl-job,如何使用xxl-job实现 的相关文章

  • 如何用Java写入OS系统日志?

    Mac OS 有一个名为 Console 的应用程序 其中包含记录的消息 错误和故障 我相信 Windows 中的等效项是事件查看器 我想 Linux 上也有一个 但我不知道它是什么 也不知道它在哪里 是否可以像这样从 Java 输出获取消
  • 如何使用 Java 将 HTML 内容转换为 PDF 而不丢失格式?

    我有一些 HTML 内容 包括格式化标签 例如strong 图像等 在我的 Java 代码中 我想将此 HTML 内容转换为 PDF 文档 而不丢失 HTML 格式 有没有办法用 Java 来实现 使用 iText 或任何其他库 I use
  • 正确配置JDK环境变量后仍然找不到java命令

    我在 Windows 虚拟机启动时安装 JDK 使用 cloudinit 用户数据将 PowerShell 脚本传输到 Windows 计算机 然后运行该脚本来安装 JDK softwares Get ItemProperty HKLM S
  • 如何使用 Java 创建多个模式连接?

    我必须使用两个数据库 DB2 Oracle 我在 DB2 数据库中有一个名为NAVID 我想使用 Java 为 Oracle 中的所有表创建相同的架构 public class automateExport static String va
  • 在哈希图中存储字符和二进制数

    我正在尝试存储字母到二进制数的映射 这是我的映射 h 001 i 010 k 011 l 100 r 101 s 110 t 111 为此 我创建了一个哈希映射并存储了键值对 我现在想显示给定句子的相应二进制值 这是我的代码 package
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 带有面板的 Java Swing JToolbar:外观和感觉

    我有一个JToolbar其中包含多个JPanels 需要 因为我希望每个都有特定的边界 不幸的是 外观管理器无法识别JPanels属于工具栏和JButtons因此 渲染器与普通按钮一样 即没有工具栏上的特殊鼠标悬停效果 更换JPanels
  • 无法在 Mac OS X 上启动应用程序 我收到错误 LSOpenURLsWithRole() 应用程序失败,错误为 -10810

    问题 我正在尝试启动一个应用程序 遗传网络分析仪 http www genostar com category products gna 但它默默地失败了 使用时open gna app产生以下错误消息 LSOpenURLsWithRole
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 如何在命令提示符中检查 JAVA_OPTS 值?

    我们的应用程序部署 JBoss 服务器然后抛出错误 PermGen space 然后在 jboss bat 和配置文件中设置 permgen 变量中的 java OPTS JAVA OPTs 中是否有值 assige 如何检查 如何在命令提
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • 当我在 Java 中输入 IP 时无法连接到我的服务器

    好的 我正在尝试学习 Java 客户端 服务器的内容 并且正在浏览教程代码 如下所示 当我将 localhost 更改为我的 IP 时 它会停止工作 请帮忙 编辑 127 0 0 1 似乎也可以工作 但不是我的真实IP Copyright
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐