在上一个博客安装成功了(Canal确认启动成功),然后接下来进行代码实现了。
https://blog.csdn.net/d875708765/article/details/106430762
同步需要一直运行着,所以这个创建一个普通的Maven工程,然后打成jar包放到服务器进行运行(最好现在本地测试了没有问题在放上去)
以下是依赖
<dependencies>
<!--阿里巴巴canal-->
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.1.0</version>
</dependency>
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
版本可以在maven仓库进行查看
https://mvnrepository.com/search?q=canal
如果出现canal版本不支持建议降版本
RedisUtil工具类
可以根据自己的需求去自行增加一些方法
import redis.clients.jedis.Jedis;
/**
* @author D
*/
public class RedisUtil {
private static Jedis jedis = null;
public static synchronized Jedis getJedis(){
//端口默认是6379 看自己修改的
if (jedis == null) {
jedis = new Jedis("服务器Ip", "端口");
jedis.auth("密码");
}
return jedis;
}
public static boolean existKey(String key) {
return getJedis().exists(key);
}
public static void delKey(String key) {
getJedis().del(key);
}
public static String stringGet(String key) {
return getJedis().get(key);
}
public static String stringSet(String key, String value) {
return getJedis().set(key, value);
}
public static void hashSet(String key, String field, String value) {
getJedis().hset(key, field, value);
}
public static void hashDel(String key, String field) {
getJedis().hdel(key,field);
}
public static Long incr(String key, long value){
return getJedis().incrBy(key, value);
}
public static Double incrByFloat(String key, double value){
return getJedis().incrByFloat(key, value);
}
}
CanalClient类含主函数
import com.alibaba.fastjson.JSONObject;
import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.CanalEntry;
import com.alibaba.otter.canal.protocol.Message;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 阿里巴巴Canal
* @author D
*/
public class CanalClient {
public static void main(String[] args) {
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("服务器IP",
11111),"example","root","123456");
int batchSize = 100;
System.out.println(connector+"测试");
try {
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
while (true) {
// 获取指定数量的数据
Message message = connector.getWithoutAck(batchSize);
long batchId = message.getId();
int size