有一天,测试同学跟我反应测试的时候有个接口一直报错,于是我去看了一下服务器日志,发现了以下报错信息
相信大家都很熟悉这个报错,就是简单的字符串转Integer
失败。因为这里的配置是获取的zookeeper
的地址,然后截取zookeeper
配置的端口并转换成Intege
因此我本能的想到是zookeeper
的配置问题,我便去查看了一下Jar包启动的环境变量,如下
发现这个配置似乎没有问题,然后我在想是不是有空格之类的情况,于是我把配置文件中的地址复制出来,在本地跑了一下,没有报错,再一想如果zooKeeper
的配置文件有问题应该项目也启动不起来。但是我看了一下上面的报错再仔细研究一下,发现2181的左边有引号,但是右边没有,当时猜测是读取的时候多读了左边的那个引号,但是配置文件中没有引号,便觉得很奇怪,于是在本地测试了一下,代码如下
public static void main(String[] args) {
System.out.println(Integer.parseInt("\"2181"));
}
输出的结果如下:
我发现如果是左边多了引号,那打印的结果就会是三个引号,而不是一个,于是感觉不是这个问题。后面测试了很多次,想了很多情况,在测试或本地测试了很多次,似乎地址都没有问题。百思不得其解的情况下,后来和同事一起发现打印日志的格式似乎不对,如下
于是决定不用tail -f
命令查看,将日志文件拷下来在notepad++
里面查看。终于发现了不对的地方。
原来不是2181左边多了一个引号,而是后面多了一个回车,导致后面的引号到了第二行,而tail -f
命令打印的格式有问题,误导了我。
有了思路之后,问题就清晰了很多,而zookeeper
的配置信息就在的配置文件里面,我使用cat
命令看这个文件似乎并没有回车,然后我又使用vi
命令,一直按左键,到最后也没有发现换行。当时觉得很奇怪,于是决定再次将文件拷下来使用notepad++
打开。果然。问题出现了。
可以看到,在notepad++
里面,这个文件是有三行的,第三行是空的,这意味着在RUN_ARGS
后面有一个回车,不过我想这个回车在指定RUN_ARGS
的引号后面,按理说应该不会对RUN_ARGS
产生影响,不过感觉或许真的是这里的问题,于是将最后的回车删除掉再上传到服务器上,重启服务后,接口恢复正常。
总结:
虽然觉得很奇怪,不明白为什么引号外面的回车会对整个参数产生影响,不过问题总算是找到了,这里学习到两点
- 在配置文件里一定要注意有没有一些多余的符号,比如回车、空格等。
notepad++
简直YYDS,以后在tail -f
、cat
、vi
等命令均没有得出答案时,不妨拷下来放到notepad++
中,或许能找到答案