启动异常-java.net.UnknownHostException

博客讲述了在Java项目中遇到的启动异常问题,由于使用了外部挂载的hosts文件导致容器内的hostname映射丢失,从而无法解析ibook5-64745dfd86-qr9z5。解决方案包括非容器化部署时在hosts文件中添加映射,以及容器化部署时在Tomcat的启动脚本中动态添加映射以解决Kerberos认证的Hive连接问题。

启动异常-java.net.UnknownHostException

异常描述:

Unable to set localhost. This prevents creation of a GUID. Cause was: iagtv5-64745dfd86-qr9z5: ibook5-64745dfd86-qr9z5: Temporary failure in name resolution
java.net.UnknownHostException: ibook5-64745dfd86-qr9z5: iagtv5-64745dfd86-qr9z5: Temporary failure in name resolution

Caused by: java.net.UnknownHostException: ibook5-64745dfd86-qr9z5: Temporary failure in name resolution

org.quartz.SchedulerException: Couldn't get host name!

报错暂时解析不了 ibook5-64745dfd86-qr9z5 这个名称。

报错原因分析:

这里是最开始采用项目打jar包+外部挂载hosts映射文件部署方式,当时是因为连接hive进行Kerberos认证需要映射,故把映射信息通过外部挂载方式加到/etc/hosts中,但是后来测试证明了这种挂载方式会把容器原自动生成的ibook5-64745dfd86-qr9z5(hostname) 映射关系给覆盖掉,因为项目中有使用监控模块,在项目启动时需要读取主机信息,而覆盖后的/etc/hosts文件中没有hostname的映射关系,所以报错找不到主机名。

解决办法:

①如果项目不是容器化部署,可以通过在/etc/host

### 解决Java中使用RestTemplate时遇到`java.net.UnknownHostException` 当在Java应用程序中使用`RestTemplate`调用远程服务时,如果出现`java.net.UnknownHostException`异常,则表明客户端无法解析目标服务器的域名。这可能是由于DNS配置错误、网络连接问题或缺少必要的Spring Cloud组件来处理服务发现和负载均衡。 对于提到的情况,可以通过以下方式解决问题: #### 添加必要依赖 为了使`@LoadBalanced`注解生效以及让`RestTemplate`能够正确识别由Eureka或其他注册中心管理的服务名称,需确保项目包含了适当版本的Spring Cloud Starter LoadBalancer库[^3]。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> ``` #### 配置带有负载平衡功能的RestTemplate Bean 定义一个带`@LoadBalanced`标记的bean实例化方法可以使得该模板支持基于逻辑名的服务间通信而不是硬编码URL地址[^2]。 ```java @Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } } ``` #### 设置HTTPS代理主机参数 要为整个JVM进程指定HTTP(S)代理设置,可以在启动命令行上添加相应的系统属性。这对于那些位于防火墙后面或者需要通过特定网关访问外部资源的应用程序特别有用。 例如,在运行应用之前设置环境变量或直接修改启动脚本中的JAVA_OPTS部分加入如下选项即可实现全局范围内的HTTPS流量转发至指定代理服务器[^1]: ```bash -Dhttps.proxyHost=your-proxy-hostname \ -Dhttps.proxyPort=port-number ``` 请注意替换上述占位符(`your-proxy-hostname`, `port-number`)为你实际使用的代理服务器信息。 以上措施应该能有效缓解因未知主机而导致的问题,并允许安全地经由企业内部代理完成对外部API的安全请求操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值