SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution
一、起因与原因分析过程
前端小伙伴儿告诉我,说服务器崩了。

请求数据接口,接口有响应,但报的json提示指向:数据库异常错误。
遂登陆云主机查看日志,核心记录显示如下:
2018-11-09 22:15:53.824 ERROR 26088 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Caused by: java.net.UnknownHostException: abc.cn: Temporary failure in name resolution【名称解析的临时失败】
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_151]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_151]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_151]
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
... 67 common frames omitted 2018-11-09 22:15:53.825 WARN 26088 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata : Communications link failure Caused by: java.net.UnknownHostException: abc.cn
at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_151]
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
... 66 common frames omitted 2018-11-09 22:15:56.741 WARN 26088 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S01
2018-11-09 22:15:56.742 ERROR 26088 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2018-11-09 22:15:56.750 WARN 26088 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
2018-11-09 22:15:56.764 INFO 26088 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2018-11-09 22:15:56.877 INFO 26088 --- [ main] ConditionEvaluationReportLoggingListener :
第一次遇到这问题,有点懵,直接把所有的SpringBoot和tomcat相关进程kill了;重启SpringBoot项目(jar包);查看日志,项目启动失败。Excuse Me?
搜索该问题UnknownHostException: abc.cn: Temporary failure in name resolution,事情有了转机:怀疑确实是域名解析出了问题,DNS失败。
做出假(huai)设(yi):我的云主机所属云服务器提供商的服务器集群所处内网不能直接访问/解析外网的域名,导致DNS失败。
验证假设:
本地电脑Ping域名:ping abc.com ,成功响应IP地址 x.y.z.q【外网解析域名正常】

在云主机Ping域名abc.com,未成功响应,如下图。【云主机内网解析域名失败】
验证成功。
那么,如何解决: 云主机在云服务器提供商的内部不能解析域名(abc.com),从而DNS解析失败,导致不能连接数据库所致 的问题?
二、解决方案
原理:类似于平时我们在本地电脑fq或者破解某些软件的验证关时,更改windows的host文件,让主机的网络请求DNS优先解析本地的[IP 域名]解析配置。
扩展子问题1:DNS概念
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
扩展子问题2:DNS整套解析系统的原理?(忘了?就请去复习)
解决方法:
方法1:新增配置云主机
step1.HOST 本地DNS解析【仅此方法,已被亲测有效】
vi /etc/hosts
step2.添加<IP,域名>解析。例如:
223.231.234.33 www.baidu.com
方法2: 网卡配置文件DNS服务地址【特点:重启服务器不会被抹掉配置】
vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加DNS服务器地址。例如:
DSN1='114.114.114.114'
【备注】免费公共的DNS有:(详见:DNS服务器地址)
| Google DNS | 8.8.8.8,8.8.4.4 |
| Public DNS+ | 119.29.29.29 |
| 阿里 DNS | 223.6.6.6,223.5.5.5 |
| 百度 DNS | 180.76.76.76 |
| 360 DNS | 电信:101.226.4.6 联通:123.125.81.6 移动:101.226.4.6 铁通:101.226.4.6 |
| OpenDNS | 208.67.220.220 |
| 114DNS | 114.114.114.114,114.114.115.115 (有广告插入嫌疑) |
方法3:系统默认DNS配置【特点:重启服务器会被抹掉配置,非永久性】
vi /etc/resolv.conf
添加DNS服务器解析规则。例如:
nameserver 114.114.114.114
【小结】系统解析的优先级:方法1>方法2>方法3
方法4:项目不使用域名,直接使用IP地址【特点:治标不治本,不一定适用所有工程情况】
三、结果分析
1、Spring Boot的初始化肯定是先于Tomcat的,所以应该是Spring Boot的初始化过程中出现了阻塞导致应用启动过慢的问题。
2、Caused by: java.net.UnknownHostException: abc.cn:未知域名异常
3、Linux nano操作
保存 :Ctrl+O
退出:Ctrl+X
4、疑问:为什么之前项目部署就可以,且没有出问题呢?根本原因说明还没找到
四、参考文献
[1] LINUX DNS解析的3种修改方法~ 【推荐】
[2] DNS服务器地址 【推荐】
[3] Temporary failure in name resolution - DNS引发的问题和思考 【推荐:解题思路清晰】
[5] nano编辑器使用教程
SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution的更多相关文章
- 阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问
阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问
- 腾讯云服务器 - 安装redis3.2.9以及集群
redis大家都知道,服务器上必不可少的,那么在生产环境下安装的步骤和虚拟机里也是差不多的 官网上最新稳定版是3.2.9,而4.0的更新比较大,但是比几个还是beta版嘛 下载并且上传压缩包至云服务器 ...
- mycat启动报错UnknownHostException(Temporary failure in name resolution)解决方法
重启命令 ./mycat restart 查看日志 cd logs tail -f wrapper.log 报错信息 INFO | jvm 2 | 2018/05/09 11:28:28 | Erro ...
- springboot项目部署云服务器
Springboot项目部署云服务器 springboot项目部署云服务器还是挺简单的 首先你要有java运行环境,就是jdk的安装,如果还没有装没有参考安装:阿里云ECS建网站(建站)超详细全套完整 ...
- 阿里云服务器Linux CentOS安装配置(八)nginx安装、配置、域名绑定
阿里云服务器Linux CentOS安装配置(八)nginx安装.配置.域名绑定 1.安装nginx yum -y install nginx 2.启动nginx service nginx star ...
- 阿里云SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
如果是阿里云的服务器 SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in ...
- 如何通过云效Flow完成自动化构建—构建集群
如何通过云效Flow完成自动化构建-构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付 ...
- ECStore图片云端集群存储实践-又拍云存储
通过又拍云存储REST API ,为ECStore新增图片存储引擎,从而达到图片数据与主站数据分离.提高网站性能. 图片存储引擎相关文件添加与修改 一共涉及到ECStore 2个APP 的文件添加和修 ...
- 亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容
Amazon目前提供为期一年的免费VPS服务,可到地址http://aws.amazon.com 进行申请. 现在对账号申请成功后,对VPS主机配置CentOS的过程做个图文介绍 1.创建实例(Ins ...
随机推荐
- Redis学习笔记(3)——Redis的命令大全
Redis是一种nosql数据库,常被称作数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted se ...
- HTML5 canvas clearRect() 方法
浏览器支持 Internet Explorer 9.Firefox.Opera.Chrome 以及 Safari 支持 clearRect() 方法. 注释:Internet Explorer 8 或 ...
- Linux操作系统上要慎用的6个命令及防范方法
Linux操作系统上要慎用的6个命令及防范方法 基于Linux平台工作的童鞋都知道Linux命令行使用起来非常高效和快捷,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候(别笑,别以为自己真的 ...
- CMD 和 Git 中的代理设置
CMD 设置代理 在 cmd 环境下设置代理可能不是很常用,但是某些情况下还是可能会用到,比如公司的电脑只能通过设置代理访问外网,而你需要在 cmd 环境下使用 gem 命令更新文件时. 当然,如果你 ...
- php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...
- 2018-2019-2-20175332-实验二《Java面向对象程序设计》实验报告
一.单元测试 实验要求:参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习 提交最后三个JUnit测试用例(正常 ...
- PHP中feof()函数的猜测
本文环境: OS:Mac OS X 10.8.4 PHP:5.3.15 PHP的官方手册中,函数feof()下面的讨论不少,对此做了一些相关的测试. <?php print <<&l ...
- Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)
目录 Python5大擅长领域 WEB开发 网络编程 科学运算 GUI图形开发 运维自动化 Python在世界上的知名应用 国外 谷歌 CIA NASA YouTube Dropbox Instagr ...
- 程序员修神之路--🤠分布式高并发下Actor模型如此优秀🤠
写在开始 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递.使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争.处理各种锁的问题是让人十分头痛的一件事. 传统多数流行的语言并 ...
- 【学习总结】Git学习-参考廖雪峰老师教程-总
公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...