开发者社区> 问答> 正文

canal-adapter在本地环境可正常运行,编译后在服务器上运行出错;

jdk1.8 canal-adapter1.1.4 在本地集成了ES7.8.0;在本地运行正常,在服务器上不停的刷错误日志

2021-03-04 17:09:17.217 [Thread-4] ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - process error! java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer; at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.readNextPacket(SimpleCanalConnector.java:400) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.readNextPacket(SimpleCanalConnector.java:385) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.doConnect(SimpleCanalConnector.java:153) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.connect(SimpleCanalConnector.java:115) at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterWorker.process(CanalAdapterWorker.java:88)

本地操作过程见:http://note.youdao.com/noteshare?id=74e238b7599e13cc15cdd060b5da5bee

一直没解决,请求大佬指点,本地没问题,服务器出错;

原提问者GitHub用户qingsongxi

展开
收起
山海行 2023-04-27 18:49:49 202 0
1 条回答
写回答
取消 提交回答
  • 已解决 跟了下源码

    com.alibaba.otter.canal.client.impl.SimpleCanalConnector 42行,方法readHeader.clear();

    进行方法,调的是jdk的下rt.jar里面的方法。异常信息是

    java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer,但是明明jdk是有这个方法的。

    回答16.png

    一般这种情况是jdk版本不一致导致的。可能作者用是jdk 9,10,11或者更高版本开发的,而环境变量低于代码编译版本。

    所以用高版本运行就可以了。

    我直接用了jdk12运行,就没有报这个错了。我用的是mysql同步es,数据同步正常。我直接用jdk12测试的,可能 9,10,11也可以,你们自己去测试。这个问题网上找了半天也没有找到答案,我看也有好多同学在问。版本发布声音说的是jdk1.6.x以上就可以运行,太坑了。

    回答17.png

    原回答者GitHub用户zeyuGitHup

    2023-04-28 13:39:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS块储存产品全面解析 立即下载