如果你非要使用中文目录的话,这里有一个比较简单的方式。
因为zookeeper的配置文件是zoo.cfg,我们需要了解都有哪几个地方使用到了这个文件。
第一步
java程序中,在启动zk的时候,会加载配置文件。zookeeper使用的是Properties加载的,源码见下图
Properties文件默认的文本编码是unicode,Java程序读取的时候会自动将unicode转为本地编码(一般在程序中都是UTF-8)。
所以需要我们在zoo.cfg中写入unicode编码的中文。
比如zk的安装目录是, /media/zhangxue/工作空间/java/zookeeper-3.4.9
我想要将dataDir配置在/media/zhangxue/工作空间/java/zookeeper-3.4.9/zookeeper
我们在eclipse创建一个properties文件,我们把中文复制进去,eclipse自动帮我们转为 \u5DE5\u4F5C\u7A7A\u95F4
所以dataDir的配置如下。
dataDir=/media/zhangxue/\u5DE5\u4F5C\u7A7A\u95F4/java/zookeeper-3.4.9/zookeeper
这个操作保证的Java程序能正常的调用到配置文件,初始化zk。但是这还不能保证zk能正常启动。
第二步
在zk启动时,会校验目录是否存在(命令在zkServer.sh中)。
这个地方使用shell进行操作,shell进行编码比较麻烦。所以我在zoo.cfg中增加了一个配置
dataDirChinese=/media/zhangxue/工作空间/java/zookeeper-3.4.9/zookeeper
之后修改zkServer.sh中的dataDir为dataDirChinese。这样就保证执行shell脚本的时候能正常操作目录了。其他的中文路径配置同上。
第三步
我们需要验证我们修改的是否成功,在/zookeeper/bin目录下 执行命令: ./zkServer.sh start 显示启动
执行命令: ./zkCli.sh -server 127.0.0.1:2181 登录zk客户端
继续执行下面的命令
OK,结束
总结
还是zk官方太作,一套操作即可完成的工作,使用了两套方式去做,官方也不给解决方案,只能自己想办法弄了。
领取专属 10元无门槛券
私享最新 技术干货