成功没有捷径
起因
真刀真枪实战干过的兄弟们是最明白的,当你解决完本地开发后,往往还有一个最致命的问题,部署、部署、部署,下面的图是我们想要的部署结果,其实当我写这篇文章的时候,也就意味着这些都已经搞定了,但是为了让各位好兄弟少采坑,我临危受命将该文章肝出来。
彩蛋
原打算只是简单的讲解一下"Host is unreachable"错误的解决方法,但是想了又想还是将今日所有遇到的错误都罗列一下吧,既可以将错误的解决办法分享给大家也能够提升一下自己的写作能力(嘻嘻嘻两全其美,香喷喷~~)。
ORACLE驱动包错误
本地开发的时候oracle的驱动包一直是使用的ojdbc6。
<!-- oracle===本地开发使用的oracle依赖 -->
<dependency>
<groupId>com.jslsolucoes</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
但当打包发布到服务器上之后(查看启动日志时发现),日志中有"Driver does not support get/set network timeout for connections"这样一段输出,大概中文意识:“驱动程序不支持获取/设置连接的网络超时”,也就是不支持该驱动获取网络超时,起初,我根据它的源码排错时,以为是它没有获取到数据库连接才报的此错误,但我调试过后发现不是数据库连接的问题,万般无奈,只能换个驱动进行尝试,当我换了个驱动再次打包发布测试的时候,发现该问题已经解决,哦…谢特。
<!--ojdbc8===部署时候改成该依赖-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.7.0.0</version>
</dependency>
主机不可到达错误(Host is unreachable)
Host is unreachable,其实程序已经告诉我们错误的原因了,要么访问地址不存在,要么因为网络的某些协议导致无法访问到指定的主机,对于该情况最简单的方法就是排除法,ip只有几个(如果使用docker的话内部ip一个、如果没有使用docker的话,那么只剩下外网ip),只有这么几个ip,一个一个排查也能也能将问题解决。
我遇见该问题的原因,服务与服务之间的数据交互我是通过Feign来完成的,当然本地是没问题的,而部署到单个服务器上也是没有问题的,但是如果要是服务器1请求服务器2中服务呢?
//我之前的写法:单服务器或本地
@FeignClient(value = "provider1")
public interface demo {
/**
* test
*/
@PostMapping(value = "/xxxx")
@ResponseBody
public String xxxx();
}
//复杂场景多服务器
@FeignClient(value = "provider1",url="ip:port")
public interface demo {
/**
* test
*/
@PostMapping(value = "/xxxx")
@ResponseBody
public String xxxx();
}
心得
我觉得最可怕的不是bug,而是自己,如果能够战胜内心中懒惰、悠哉的自己,那自己就是无敌的,没有任何困难能够成为自己的绊脚石,即使有,那也是短暂的。