Bug collection - Startup exception ( 启动时异常 )

Startup exception ( 启动时异常 )

netstat -anb|findstr "4000" 根据具体的端口号查对应的PID (only one)

netstat -anb 查看端口使用情况 (list)

taskkill /pid 10248 通过进程号杀端口号

taskkill /pid 10248 /f 通过进程号杀端口号(强杀)

目录

Startup exception ( 启动时异常 )

com.netflix.discovery.shared.transport.TransportException

java.lang.ExceptionInInitializerError

1. Jar 资源引入 Springboot 项目

java.net.BindException : ( 端口被占用 )

1. Failed to start component [Connector[HTTP/1.1-8080]]


com.netflix.discovery.shared.transport.TransportException

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

史上巨坑eureka注册,出现TransportException异常

本以为在server端配置的eureka.client.serviceUrl.defaultZone和client端是同一个(无敌大坑),

切忌没有contextPath的时候是一样的,如果有,那么就要将server端配置的contextPath内容加到client端的defaultZone的访问路径端口号后面。

解决办法: 

https://blog.csdn.net/qq_35221138/article/details/81016171		史上巨坑eureka注册

1、补充一个点,若注册中心开启了用户认证,服务端没配置上用户名密码,也是报这个错误
2、注意hosts文件里的映射配置,本地配置请使用127.0.0.1,不推荐使用本机ip:192.168.1.174 等;因为,当遇到服务器重启等异常情况,你的本机ip会改变,则本机ip无法完成映射,后果可知。
3、


java.lang.ExceptionInInitializerError

项目开发时遇到一个问题,整个项目是使用Spring等框架搭建起来的在运行项目时不报任何的异常信息,就是找不到某个类信息,各方查找该类确实是存在的,最后通过断点跟踪时在异常栈内发现java.lang.ExceptionInInitializerError这个异常信息,但这个异常信息没有在控制台或者日志系统中抛出来,查明原因之后就对症下药最终解决了该问题。

静态初始化程序中发生意外异常的信号,抛出ExceptionInInitializerError表明在计算静态初始值或静态变量的初始值期间发生异常。

要理解这个异常从Java类中的静态变量初始化过程说起,在Java类中静态变量的初始化顺序和静态变量的声明顺序是一致的


1. Jar 资源引入 Springboot 项目

将 jar 放到你的项目中,IDEA 开发环境下右键可以添为库 add yo library

在java项目中调用自定义的jar包需要两个步骤。

第一步,将需要使用的jar包导入到项目中,如果在导入的jar包前看到一个奶瓶装状的图标,那么代表可以正常使用该jar包了,

第二步,在类中使用到自定义的jar包中的内容时,需要导入相关的包信息。

一般在开发时,我们自定义的jar包大多数为工具包,即直接使用对象.方法的形式来使用jar包中的内容。


java.net.BindException : ( 端口被占用 )

java.net.BindException : 地址已在使用,也可以说是端口被占用,通常出现在启动服务的时候。

java.net.BindException: Address already in use: bind

bindexception:已经使用的地址:bind 

解决办法:

管理员打开cmd命令行,输入:

netstat -anb 查看端口使用情况

taskkill /pid 10248 通过进程号杀端口号


netstat -ano|findstr 8080 查看指定端口的占用情况

taskkill /pid 10248 /f 通过进程号杀端口号(强杀)


1. Failed to start component [Connector[HTTP/1.1-8080]]

问题是:端口号被占用

解决方法:

输入命令:netstat -ano,列出所有端口的情况

netstat -ano                              查看端口使用情况 
netstat -ano|findstr 8080          查看"指定端口"的占用情况

taskkill /pid 10248                    通过进程号杀端口号 
taskkill /pid 10248 /f                 通过进程号杀端口号(强杀)


java.net.UnknownHostException : ( 未知域名解析 )

Caused by: java.net.UnknownHostException: 未知的名称或服务

解决方案:

修改 C:\Windows\System32\drivers\etc\hosts 文件 


org.apache.http.conn.ConnectTimeoutException

org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out

Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.5.jar:4.5.5]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.5.jar:4.5.5]
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
    ... 10 common frames omitte

从以上异常可以看到,服务一直在请求localhost:8761,而且始终超时,我检查了所有模块的注册中心地址配置,都没有发现8761这个端口 , 通过IDE全局搜索也没有找到这个端口,我启动的注册中心地址的端口为8000.

server.port=8000
eureka.instance.hostname=127.0.0.1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

解决办法:

1、注意hosts文件里的映射配置,本地配置请使用127.0.0.1,不推荐使用本机ip:192.168.1.174 等;
   因为,当遇到服务器重启等异常情况,你的本机ip会改变,则本机ip无法完成映射,后果可知。
   
2、造成的原因呢其实很简单,就是server的配置里面没有配置defaultzone

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9001/eureka/
      
      是因为在源码里面EurekaClientConfigBean类里面指定了defaultZone

知因由:

eureka 源码

package org.springframework.cloud.netflix.eureka;
import ...
@ConfigurationProperties("eureka.client")
public class EurekaClientConfigBean implements EurekaClientConfig {
    public static final String PREFIX = "eureka.client";
    public static final String DEFAULT_URL = "http://localhost:8761/eureka/";
    public static final String DEFAULT_ZONE = "defaultZone";
    private static final int MINUTES = 60;
    @Autowired(
        required = false
    )
    .....
    public EurekaClientConfigBean() {
        this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
        this.gZipContent = true;
        this.useDnsForFetchingServiceUrls = false;
        this.registerWithEureka = true;
        this.preferSameZoneEureka = true;
        this.availabilityZones = new HashMap();
        this.filterOnlyUpInstances = true;
        this.fetchRegistry = true;
        this.dollarReplacement = "_-";
        this.escapeCharReplacement = "__";
        this.allowRedirects = false;
        this.onDemandUpdateStatusChange = true;
        this.clientDataAccept = EurekaAccept.full.name();
        this.shouldUnregisterOnShutdown = true;
        this.shouldEnforceRegistrationAtInit = false;
    }
    ...
}

问题得解,就是因为下面这行代码

public EurekaClientConfigBean() {
  this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
  ...
}

而我们的 application.propertes 中并没有配置 defaultZone

因此我们需要配置 defaultZone 覆盖其默认值。完整 application.propertes配置如下 :

server.port=8000
eureka.instance.hostname=127.0.0.1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
##就是,这个要覆盖原有的默认地址8761,写成自己的地址8000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/


org.springframework.beans.factory.BeanCreationException


org.springframework.beans.factory.UnsatisfiedDependencyException

报错信息,找不到依赖,或者可以理解为依赖失败,看一下截取的部分报错信息

解决方案如下:

0、检查公共依赖

1、service 接口实现类上有没有加@Service注解,注解是不是引用的spring的类?不要导错包

2、接口有没有写实现类,实现类是实现的对应接口么?

比如CategoryServiceImpl implementsCategoryDAO 一不小心根据自动提示,本来应该实现CategoryService,结果实现了CategoryDAO

3、有没有扫描Service所在的包

    <!-- 启动自动扫描 -->  
    <context:component-scan base-package="com.ssm.blog.*">  
        <!-- 制定扫包规则 ,不扫描@Controller注解的JAVA类 -->  
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  
    </context:component-scan>

4、确保代码无误后,再看看包是否下载完整

5、查看注入是否正确


0. UnsatisfiedDependencyException : 找不到依赖 ( 为依赖失败 )


1. iot-office - 因公共Common依赖模块版本覆盖导致异常

解决:

common 模块清理,clean 后从新发包,覆盖异常版本,解决后续模块依赖异常问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值