文章背景:
项目中使用datax 作为交换中间件,发现统计有异常,发现datax 统计异常,查看datax源码 发现datax 提供一个钩子函数 this.invokeHooks();
涉及技术点
实现步骤
1.实现hook接口
package com.bonc.hamal.swapnode.datax;
import com.alibaba.datax.common.spi.Hook;
import com.alibaba.datax.common.util.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
/**
* @author
* @version V1.0
* @Description: (用一句话描述该文件做什么)
* @date
*/
public class DataxHook implements Hook {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public String getName() {
return this.getClass().getName();
}
@Override
public void invoke(Configuration configuration, Map<String, Number> map) {
// 在这里写自己的业务函数
logger.error("钩子执行参数 map:{}",map);
}
}
2. 在datax job同一级目录创建hook目录
![](https://i-blog.csdnimg.cn/blog_migrate/2aaf8a3f8abed91faed03da7579398d9.png)
3. 进入hook目录给创建一个文件夹
![](https://i-blog.csdnimg.cn/blog_migrate/6e4922fe49f58c49cf560c04eced4c32.png)
4. 将步骤1生成的class 文件 放入到步骤1生成的目录中
![](https://i-blog.csdnimg.cn/blog_migrate/0bb6cb16c115b5be9f452c7b28ebe4df.png)
5. 在自己的项目resource目录下创建
META-INF\services\com.alibaba.datax.common.spi.Hook 文件
6.在com.alibaba.datax.common.spi.Hook 写上步骤一自定义实现类的全类名
![](https://i-blog.csdnimg.cn/blog_migrate/0c266c425c2e5f5d3143ac76a2ab45c4.png)
验证 运行datax的启动类 验证
![](https://i-blog.csdnimg.cn/blog_migrate/8ce78a825386d856829755045ab24e54.png)