Canal-adapt部署遇到的小坑-java.lang.IllegalArgumentException: Could not resolve placeholder ‘GROUP[1]‘ in v

背景: 使用 canal+ kafka + canal-adapt。 将 源数据库mysql0 实时同步到 目的数据库mysql2。 数据流向  Mysql0 -> canal -> kafka -> canal-adapt -> Mysql2

按照官网的demo步骤进行配置。后运行报错

2021-10-25 19:45:16.358 [Thread-2] ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: rdb failed
java.lang.IllegalArgumentException: Could not resolve placeholder 'GROUP[1]' in value "\
if [ -z "$OLD_PWD" ];then export OLD_PWD=$PWD;fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
GROUP=(`history 1`)
echo "[${GROUP[1]} ${GROUP[2]}] ${GROUP[3]} ${GROUP[4]}@${GROUP[5]} ${GROUP[@]:6}" >> /var/log/loginLogs/root;
fi;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:228) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:88) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:62) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:531) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.loadAdapter(CanalAdapterLoader.java:217) [client-adapter.launcher-1.1.5.jar:na]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.init(CanalAdapterLoader.java:56) [client-adapter.launcher-1.1.5.jar:na]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterService.init(CanalAdapterService.java:60) [client-adapter.launcher-1.1.5.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
		

看报错信息: 是在 adapt加载 目的数据库的时候失败。为了确认,先去canal-server段查看数据,发现数据已经采集放到了指定的kafka topic内。

ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: rdb failed

猜测1- 开始猜测是不是驱动不对,查看了 adapt下的lib,发现jdbc-connector 是5.1.47,而我目的mysql的版本是5.7,能对应上。看来不是这个问题

接着看报错信息, 非法字符。 无法处理占位符  GROUP[1]. 看起来那段代码像是shell 脚本。但是看错误日志栈,都是spring项目,都是java语言。

java.lang.IllegalArgumentException: Could not resolve placeholder 'GROUP[1]' in value "\
if [ -z "$OLD_PWD" ];then export OLD_PWD=$PWD;fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
GROUP=(`history 1`)
echo "[${GROUP[1]} ${GROUP[2]}] ${GROUP[3]} ${GROUP[4]}@${GROUP[5]} ${GROUP[@]:6}" >> /var/log/loginLogs/root;
fi;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:228) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:88) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:62) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:531) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.loadAdapter(CanalAdapterLoader.java:217) [client-adapter.launcher-1.1.5.jar:na]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.init(CanalAdapterLoader.java:56) [client-adapter.launcher-1.1.5.jar:na]
        at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterService.init(CanalAdapterService.java:60) [client-adapter.launcher-1.1.5.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]

根据关于spring框架的报错信息去查看发现就是,加载解析发现占位符错误。但是canal-adapt的spring配置文件我都没动,canal-adapt的其他文件再三检查都没有 GROUP[1] 这东西。懵逼啊

再看错误日志有个 路径

去/var/log/loginLogs/root 路径上查看,发现是记录机子操作命令的。这就有点蹊跷了,这是机子记录命令的目录,为啥会出现在adapt上。

为了确认上述那段代码确实是本机的,env看下,看到了那段代码。

也就是canal-adpat启动加载spring的配置时,可能把环境变量也加载进来了 。

于是把env那段定义环境变量的 代码注释掉,重新运行canal-adapt。正常运行

问题解决。

至于spring为啥加载配置文件把环境变量 加载进来了,不熟悉spring。等以后有空有心情再深究吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值