springboot启动后卡住无日志的几种情况小结

下面是关于“SpringBoot启动后卡住无日志的几种情况小结”完整攻略:

问题背景

在使用SpringBoot开发JavaWeb应用时,有时候可能会遇到启动后卡住无日志的情况,导致我们无法知道整个启动过程的具体信息。这种情况通常有以下几种原因:

  1. 应用启动卡在某个点,等待某个线程执行完成
  2. 应用启动时出现了未捕获的异常
  3. 应用启动时依赖的外部服务出现了故障

接下来我们将详细讲解如何解决这些问题。

场景一:应用启动卡在某个点

症状

  • 应用启动后日志输出停止,无任何异常信息
  • 控制台输出类似于以下样式,且不再继续输出任何信息:
2018-12-17 16:26:44.901  INFO 81876 --- [f61d16dc-1]) o.s.web.servlet.DispatcherServlet       :

解决方法

通过调整日志级别来查看哪个类卡住了应用。在 application.properties 文件中添加以下配置:

logging.level.root=DEBUG

然后,重新启动应用。应用启动完毕后,查找日志,找到最后一条日志记录,查看该记录的所在类,找到该类所在的包,并修改该包的日志级别为 DEBUG 级别。重启应用,查看日志,就可以发现卡住的类并定位问题了。

场景二:应用启动时出现了未捕获的异常

症状

  • 应用启动后控制台无任何日志输出
  • 可以使用 ps -ef | grep java 命令检查进程是否存在
  • 如果进程存在则可以通过 jstack 命令获取应用的线程信息

解决方法

通过查看线程信息来定位应用启动时的异常。在终端中执行以下命令,获取Java应用的进程号:

ps -ef | grep java

然后执行以下命令,获取应用的线程信息:

jstack <PID>

这时,会输出大量的线程信息,其中可能会包含异常堆栈信息。通过查找异常堆栈信息,以及查看代码和配置文件,我们可以找到问题出在哪里,然后进行修复。

场景三:应用启动时依赖的外部服务出现了故障

症状

  • 应用启动后控制台无任何日志输出
  • 控制台会输出一条类似于“Waiting for service to start”的信息,并持续等待
  • 应用启动后不能访问某些外部服务

解决方法

对于这种情况,需要检查应用依赖的外部服务是否可以正常访问。可以通过以下方法判断外部服务是否正常:

  • 直接在浏览器中访问服务地址,检查是否能够正常响应
  • 在应用启动之前手动访问所依赖的服务,并检查是否返回了正确的响应

如果外部服务出现故障,则需要等待外部服务恢复正常,才能重新启动应用。

示例解决方法

假设我们在使用 Spring Boot 开发 Web 服务时遇到了启动失败的问题,通过调整日志级别后,发现应用启动是卡在某个 Controller 上,无法继续执行。我们在检查代码后,发现是因为该 Controller 依赖的外部服务无法提供正常的服务,导致应用启动卡住无法继续。

我们可以通过手动访问外部服务,查看其响应情况,或者等待外部服务恢复正常再次启动应用,解决这个问题。

总结

在开发 Spring Boot 项目时,可能会遇到应用启动卡住无日志输出的问题。通过以上的攻略,我们可以快速地解决这些问题。在解决问题时,需要结合具体情况进行判断和处理,才能更好地定位问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot启动后卡住无日志的几种情况小结 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • java String到底有多长?String超出长度该如何解决

    Java中的String类型是一种特殊的引用类型,用于表示字符串。在Java中,字符串是不可变的,也就是说一旦创建就不能再修改了,所以内存中的字符串是一个长度固定的字符数组,但是这个长度是不确定的。 Java中的String类型的长度并不是固定的,而是动态分配的,具体大小取决于String对象中存储的字符数量。当创建一个新的String对象时,Java会根据…

    Java 2023年5月27日
    00
  • 23种设计模式(8) java外观模式

    23种设计模式(8) Java外观模式 一、什么是外观模式? 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个一致的接口,使得这个子系统更加容易被使用。 外观模式又称为门面模式,顾名思义,就是像房屋门面一样,将一个复杂的系统或一组类的接口封装起来,提供一个更加简单、易用的接口,使得外部用户通过这个接口就能够完成庞杂…

    Java 2023年5月24日
    00
  • Java 9 中的模块Module系统

    关于Java 9中的模块(Module)系统,这里为您整理了完整的攻略。请您仔细阅读以下文章。 什么是Module系统 Java 9中引入了一种新的概念——Module系统,来管理和组织代码。作为Java9中最重要的新特性之一,模块化系统的引入为我们开发、维护和交付大规模的Java应用程序提供了更多的选择和优化。 为什么引入Module系统 随着时间的推移,…

    Java 2023年5月24日
    00
  • 在idea中显示springboot面板的方法

    在IDEA中,我们可以使用Spring Boot面板来管理Spring Boot应用程序。本文将详细讲解在IDEA中显示Spring Boot面板的方法的完整攻略,并提供两个示例。 1. 配置Spring Boot插件 以下是配置Spring Boot插件的基本流程: 打开IDEA,点击File -> Settings -> Plugins。 在…

    Java 2023年5月15日
    00
  • 浅谈springboot如何保证多线程安全

    下面是关于“浅谈Spring Boot如何保证多线程安全”的攻略: 1. 了解多线程 要理解多线程安全,我们需要先了解多线程的概念。简单来说,多线程是一种执行多个任务的机制,可以让程序同时完成多项任务,提高程序的运行效率。 但是,多线程也会带来线程安全问题。如果多个线程同时访问同一个资源,就有可能造成数据的混乱或错误。 2. Spring Boot的多线程机…

    Java 2023年5月19日
    00
  • Java面向对象基础知识之抽象类和接口

    Java面向对象基础知识之抽象类和接口 在Java面向对象编程中,抽象类和接口是重要的概念。本攻略将详细讲解抽象类和接口的基础知识,包括定义、用法、区别等内容,并提供两个示例说明。 抽象类 定义 抽象类是一种特殊的类,它不能被实例化,只能被继承。它的主要作用是作为其他类的基类,可以定义一些共性的属性和方法,并留下一些抽象方法的定义,让子类去实现。抽象方法没有…

    Java 2023年5月26日
    00
  • Java Process.waitFor()方法详解

    Java Process.waitFor()方法详解 Java中的Process类提供了在Java程序中启动外部进程的能力。在执行外部进程时,可能需要等待该进程完成,waitFor()方法就提供了这个功能。 Process.waitFor()方法概述 waitFor()方法是Process类的实例方法,用于等待进程完成。它会阻塞当前线程,直到关联的进程终止。…

    Java 2023年5月27日
    00
  • Struts2 使用OGNL遍历map方法详解

    Struts2 中遍历 Map 对象 首先,我们需要在 Struts2 的 jsp 页面中通过<s:iterator>标签来遍历 Map 类型的对象。这个标签包含了一个 value 属性,用于读取 map 中的值,具体如下: <s:iterator value="myMap"> Key: <s:propert…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部